Consiste em um conjunto de métodos estatísticos usados para simplificar a interpretação de grandes conjuntos de dados. A aplicação pode ocorrer em diversas áreas do conhecimento.
Segundo Mingoti (2005, p. 21), “embora historicamente o uso de métodos multivariados esteja relacionado com trabalhos na Psicologia, Ciências Sociais e Biológicas, mais recentemente eles têm sido aplicados em um grande universo de área diferentes, como: Educação, Geologia, Química, Física, Engenharia, Ergonomia, etc.”.
Basicamente os objetivos são:
Redução ou simplificação da base de dados sem sacrificar informação importante;
Ordenação e agrupamento (classificação) - criar grupos de objetos (ou variáveis) semelhantes com base em várias características. Por isso é multivariada;
Investigação da estrutura de dependência entre as variáveis. Podemos ter um conjunto de dados relacionados com tecnologias utilizadas nas fazendas e outro conjunto de dados relacionados com característica do dono da propriedade. A dependência entre estes grupos de variáveis pode indicar porque algumas propriedades usam mais tecnologias do que outras;
Predição - realizar previsões;
Construção de hipóteses e testes.
As técnicas de Análise multivariada são muito utilizadas para a construção de índices. Um índice sintetiza em uma única variável a informação de todas as variáveis que foram medidas sobre o fenômeno. Como exemplo, pode-se citar Índice de Desemprego, Índice de Qualidade de Vida, Índice de Qualidade Ambiental, Índice de Desenvolvimento Humano (IDH), entre outros. Nestes casos, a Análise de Componentes Principais ou Análise Fatorial são técnicas que podem ser utilizadas (LIMA, 2015).
Outra aplicação interessante é quando se procura dividir um conjunto de objetos em grupos que sejam os mais homogêneos possíveis dentro do grupo e heterogêneos entre si. Uma empresa pode buscar estratificar seus clientes, dividindo-os em grupos e traçando objetivos para cada grupo separadamente. Pode-se separar os municípios de determinado estado em grupos homogêneos com o intuito de delinear programas adequados para os diferentes grupos. Nestes casos, a Análise de Cluster é a técnica adequada (LIMA, 2015).
Outra situação é a enfrentada pelas seguradoras para realização de seguros de veículos. Cada cliente se encaixa em determinado perfil que pode ter maior ou menor risco de sinistro. Neste caso, pode-se aplicar Análise Discriminante buscando identificar a qual grupo de risco de sinistro um determinado elemento tem mais chance de pertencer (LIMA, 2015).
Os dados para Análise multivariada em uma amostra de seção cruzada são geralmente compostos de variáveis (renda, idade, anos de escolaridade, etc.) e observações (pessoa, família, escola, município, estado, país, etc.). Dispostos em uma tabela os dados formam uma matriz em que cada coluna se refere a uma variável e cada linha a uma observação. As observações são as unidades de Análise ou unidades amostrais e as variáveis são as características medidas nas observações. Assim, os dados usados são tipicamente formados por n observações em p variáveis.
#Verificando o diretorio que o R esta direcionado
getwd()
## [1] "/Users/jricardofl/Dropbox/Embrapa/2022/PPGDIDES/Análise Multivariada/multivariada/estatistica1"
#Direcionado o R para o Diretorio a ser trabalhado
setwd('/Users/jricardofl/Dropbox/tempecon/dados_censoagro')
#Pacote
library(readxl)
#Entrada dos dados
dados <- read_excel("artigo.xlsx")
# Nomes das variáveis utilizadas
#
#x1 Porcentagem dos estabelecimentos que usam força animal
#x2 Porcentagem dos estabelecimentos que usam força mecânica
#x3 Porcentagem da área com pastagens que é plantada
#x5 area trabalhada como porcentagem da área aproveitável
#x6 Area com lavouras permanentes e temporárias como proporção da área aproveitável
#x7 Numero de tratores por equivalente homem
#x8 Numero de tratores por área explorada
#x9 Numero de arados por área explorada
#x10 Numero de colheitadeiras por área explorada
#x11 Valor total dos combustíveis consumidos por área explorada
#x12 Quantidade de energia eletrica consumida por área explorada
#x13 Quantidade de energia eletrica consumida po equivalente homem
#x14 Valor total dos bens por área explorada
#x15 Valor total dos bens por equivalente homem
#x16 valor total dos investimentos por area explorada
#x17 Valor total dos investimentos por equivalente homem
#x18 Valor total dos financiamentos em 2006 por área explorada
#x19 Valor total dos financiamentos em 2006 por equivalente homem.
#x20 Valor total da produção em 2006, por área explorada
#x21 Valor total da produção em 2006, por equivalente-homem
#x22 Valor total das despesas em 2006, por área explorada
#x23 Valor total das despesas em 2006, por equivalente homem
#x24 Despesas com adubos, corretivos, sementes e mudas, agrotóxicos, medicamenteos para animais, sal e rações por área explorada
#x25 Despesas com adubos, corretivos, sementes e mudas, agrotóxicos, medicamenteos para animais, sal e rações por equivalente homem
#x26 Assistência Técnica
#x27 uso de agrotóxico para controle de pragas e doenças
#x28 uso de controle alternativo de pragas e doenças
#x29 irrigação
#Visualizaçao dos dados
head(dados, 15)
## # A tibble: 15 × 28
## x1 x2 x3 x5 x6 x7 x8 x9 x10 x11 x12
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 14.5 32.7 26.0 47.7 38.7 0.0678 3.33e-3 1.46e-2 3.38e-4 0.0278 0.0130
## 2 29.9 15.8 63.7 54.2 11.8 0.0207 6.70e-4 7.71e-3 0 0.0131 0.00773
## 3 13.1 14.9 49.6 46.8 17.3 0.0401 1.30e-3 1.37e-3 1.04e-4 0.0180 0.00785
## 4 17.7 8.97 74.7 52.9 2.42 0.108 4.35e-4 4.71e-4 1.05e-3 0.00627 0.00422
## 5 17.0 38.6 32.0 29.1 14.7 0.0825 2.46e-3 1.58e-2 1.37e-4 0.0197 0.00898
## 6 21.2 11.9 57.6 39.6 8.80 0.00896 2.71e-4 2.37e-3 0 0.0267 0.0133
## 7 30.5 32.1 47.9 45.9 24.9 0.0453 1.42e-3 1.13e-2 2.58e-4 0.0250 0.00711
## 8 27.5 22.5 66.0 35.5 16.8 0.0559 1.07e-3 1.05e-3 0 0.00886 0.00579
## 9 39.8 24.5 69.8 40.8 14.3 0.0177 2.38e-4 5.25e-3 0 0.0108 0.00409
## 10 13.4 65.4 21.6 53.8 50.1 0.08 5.50e-3 1.20e-2 0 0.103 0.0224
## 11 38.3 13.8 43.2 61.3 43.5 0.0978 2.61e-3 4.59e-2 0 0.0211 0.0274
## 12 45.2 13.5 12.4 20.7 15.9 0.0108 8.57e-4 6.75e-3 0 0.00941 0.0126
## 13 27.2 26.3 37.6 21.4 7.15 0.0218 3.59e-4 4.60e-3 0 0.0122 0.00535
## 14 50.4 9.24 19.9 22.2 11.2 0.0269 2.46e-4 7.32e-3 0 0.0103 0.00803
## 15 49.8 11.0 31.3 36.1 22.7 0.0244 1.45e-3 1.83e-2 1.32e-4 0.0121 0.0142
## # … with 17 more variables: x13 <dbl>, x14 <dbl>, x15 <dbl>, x16 <dbl>,
## # x17 <dbl>, x18 <dbl>, x19 <dbl>, x20 <dbl>, x21 <dbl>, x22 <dbl>,
## # x23 <dbl>, x24 <dbl>, x25 <dbl>, x26 <dbl>, x27 <dbl>, x28 <dbl>, x29 <dbl>
summary(dados)
## x1 x2 x3 x5
## Min. : 0.000 Min. : 0.3141 Min. : 0.00 Min. : 4.145
## 1st Qu.: 9.273 1st Qu.: 3.1585 1st Qu.:12.45 1st Qu.:31.239
## Median :21.774 Median : 6.1091 Median :27.93 Median :48.746
## Mean :28.304 Mean :10.7766 Mean :31.25 Mean :51.011
## 3rd Qu.:43.841 3rd Qu.:13.9814 3rd Qu.:45.17 3rd Qu.:71.117
## Max. :88.970 Max. :65.4206 Max. :99.39 Max. :99.126
## x6 x7 x8 x9
## Min. : 1.854 Min. :0.00000 Min. :0.0000000 Min. :0.000000
## 1st Qu.:15.328 1st Qu.:0.01494 1st Qu.:0.0005492 1st Qu.:0.001005
## Median :27.945 Median :0.02586 Median :0.0011719 Median :0.003356
## Mean :36.695 Mean :0.04053 Mean :0.0019096 Mean :0.010467
## 3rd Qu.:56.710 3rd Qu.:0.05072 3rd Qu.:0.0026078 3rd Qu.:0.012678
## Max. :98.477 Max. :0.52381 Max. :0.0235613 Max. :0.111792
## x10 x11 x12 x13
## Min. :0.000e+00 Min. :0.00000 Min. :0.001409 Min. : 0.03629
## 1st Qu.:0.000e+00 1st Qu.:0.01189 1st Qu.:0.014036 1st Qu.: 0.32684
## Median :0.000e+00 Median :0.02268 Median :0.024761 Median : 0.60987
## Mean :9.952e-05 Mean :0.03464 Mean :0.055689 Mean : 0.99300
## 3rd Qu.:0.000e+00 3rd Qu.:0.04019 3rd Qu.:0.047151 3rd Qu.: 1.18653
## Max. :3.570e-03 Max. :0.33107 Max. :2.292243 Max. :14.45350
## x14 x15 x16 x17
## Min. : 0.4787 Min. : 4.73 Min. :0.00000 Min. : 0.0000
## 1st Qu.: 1.9221 1st Qu.: 45.17 1st Qu.:0.03837 1st Qu.: 0.7292
## Median : 3.3407 Median : 83.51 Median :0.06399 Median : 1.4646
## Mean : 4.8614 Mean :104.56 Mean :0.08980 Mean : 2.8145
## 3rd Qu.: 5.6912 3rd Qu.:133.06 3rd Qu.:0.09981 3rd Qu.: 2.6578
## Max. :56.3753 Max. :550.05 Max. :0.78753 Max. :163.4401
## x18 x19 x20 x21
## Min. :0.00000 Min. : 0.0000 Min. : 0.05285 Min. : 2.074
## 1st Qu.:0.02011 1st Qu.: 0.5007 1st Qu.: 0.42035 1st Qu.: 11.252
## Median :0.03563 Median : 0.8523 Median : 1.01866 Median : 22.177
## Mean :0.06214 Mean : 4.1450 Mean : 1.97985 Mean : 36.598
## 3rd Qu.:0.06160 3rd Qu.: 1.2654 3rd Qu.: 2.23304 3rd Qu.: 34.872
## Max. :2.62630 Max. :545.0519 Max. :53.67879 Max. :506.140
## x22 x23 x24 x25
## Min. : 0.02411 Min. : 0.8373 Min. : 0.004046 Min. : 0.1063
## 1st Qu.: 0.18269 1st Qu.: 4.4894 1st Qu.: 0.036479 1st Qu.: 1.0406
## Median : 0.34980 Median : 7.7355 Median : 0.096662 Median : 2.1045
## Mean : 0.75201 Mean : 17.9948 Mean : 0.353451 Mean : 6.9821
## 3rd Qu.: 0.66069 3rd Qu.: 13.8213 3rd Qu.: 0.182730 3rd Qu.: 3.3604
## Max. :24.01334 Max. :1087.0980 Max. :20.588395 Max. :326.5452
## x26 x27 x28 x29
## Min. : 0.2359 Min. : 0.000 Min. : 0.000 Min. : 0.0000
## 1st Qu.: 3.1542 1st Qu.: 8.425 1st Qu.: 1.068 1st Qu.: 0.3109
## Median : 6.0857 Median :16.163 Median : 2.374 Median : 1.2659
## Mean :10.5093 Mean :23.940 Mean : 4.700 Mean : 4.6938
## 3rd Qu.:12.1288 3rd Qu.:36.414 3rd Qu.: 5.116 3rd Qu.: 5.8438
## Max. :59.4433 Max. :75.873 Max. :43.162 Max. :58.0766
Pode-se considerar que a estatística multivariada se divide em dois grupos: o primeiro consiste nas técnicas de simplificação da estrutura de variabilidade dos dados. Principalmente, fazem parte deste grupo a Análise de Componentes Principais, Análise Fatorial, Correlações Canônicas, Cluster e Discriminante.
O segundo grupo concentra os métodos de estimação de parâmetros, como na análise de Regressão Simples e Múltipla.
Para um estudo aprofundado das técnicas de Análise Multivariada, é importante revisar conceitos de Estatística Básica: média, variância, desvio padrão, covariância, correlação seriam as mais relevantes.
E também é importante revisar conceitos de álgebra matricial: vetores, matrizes, combinações lineares, dependência linear, raízes e vetores característicos e decomposição espectral, basicamente.
A Análise de Componentes Principais (ACP) é uma técnica de Análise Multivariada que consiste em transformar um conjunto original de variáveis em outro conjunto, os Componentes Principais (CP) com propriedades específicas. Os CP’s são combinações lineares das variáveis originais e são estimados de forma a captar o máximo da variação total dos dados. O processo de estimação é tal que o primeiro CP capta o máximo de variância possível, o segundo capta o máximo possível do restante de variância, o terceiro o máximo possível do restante de variância, e assim sucessivamente.
A ACP é apropriada quando as variáveis sob investigação são todas de mesma natureza, de modo que não tenhamos, por exemplo, uma ou mais variáveis dependentes e um conjunto de covariáveis, como no caso de análise de regressão.
Segundo Mingoti (2005, p. 59), “seu objetivo principal é o de explicar a estrutura de variância-covariância de um vetor aleatório, composto de p-variáveis aleatórias, através da construção de combinações lineares das variáveis originais. Estas combinações lineares são chamadas de componentes principais e são não correlacionadas entre si”.
Uma combinação linear de vetores ou de variáveis é um novo vetor (ou nova variável) defindo por
\[ y=a_1x_1+a_2x_2+a_3x_3+ \dots + a_px_p \] “Se temos p-variáveis originais é possível obter-se p componentes principais. No entanto, em geral deseja-se obter ‘redução do número de variáveis a serem avaliadas e interpretação das combinações lineares construídas’, ou seja, a informação contida nas p-variáveis originais é substituída pela informação contida em k (k\(<\)p) componentes principais não correlacionados” (MINGOTI, 2005, p. 59).
A ideia é que se algumas das variáveis originais são correlacionadas, elas estão, efetivamente, “dizendo a mesma coisa”. Nesse caso, um conjunto menor de variáveis, não-correlacionadas, pode ser tão eficaz quanto o conjunto de variáveis originais para explicar a estrutura de variância-covariância dos dados.
Matricialmente, pode ser escrita como \(y=a'x\) onde os a’s são as constantes que definem a combinação linear e são determinadas de forma a atender às características da combinação linear que se deseja. Como as variáveis são dadas, os coeficientes a’s são determinados de forma a atender às restrições estabelecidas, ou seja, o princípio da técnica. As combinações lineares tem média e variância definidas, respectivamente, por \(E(Y)=a'\mu\) e \(V(Y)=a'\sum a\).
Mais de uma combinação linear pode ser definida de um conjunto de variáveis. Em geral, com p variáveis pode-se formar p combinaçoes lineares diferentes.
A ACP transforma um conjunto de variáveis correlacionadas em um conjunto de variáveis não-correlacionadas. Assim, se as variáveis originais são aproximadamente não correlacionadas, não faz sentido ser feita uma ACP.
Variáveis quantitativas usadas em análise multivariada são, geralmente, expressas em unidades diferentes. Diferenças de escalas afetam a contribuição da variável para a variância generalizada. Para usar essas variáveis em uma técnica multivariada elas precisam ser transformadas para uma escala comum. Entre os métodos usados alguns eliminam diferenças em tamanho (escala) outras reduzem tamanho e variabilidade para uma escala comum.
O método mais usado para tornar variáveis comparáveis é a Padronização, que consiste em subtrair a média e dividir pelo desvio padrão. Além de simplificar cálculos e manipulações matemáticas, a padronização de variáveis é importante para resolver o problema de unidades de medidas diferentes das variáveis e do desbalanceamento entre as variâncias. Toda variável padronizada tem média zero, variância igual a um e é adimensional.
Uma questão importante é que a covariância entre variáveis padronizadas é igual a correlação entre variáveis originais. Assim, usar a matriz de correlações das variáveis ao invés da matriz var-cov é o mesmo que trabalhar com variáveis padronizadas.
Existe uma tendência para que a variável com maior volatilidade cause uma desestabilização na Análise de Componentes Principais e também na Análise Fatorial. A solução é padronizar as variáveis de forma que tenham média zero e variância unitária.
A Análise passa a ser determinar as raízes características e os vetores característicos da matriz de correlações.
Sobre raízes e vetores característicos, uma matriz quadrada A tem raízes características \(\lambda_i\) e vetores característicos \(X_i\) dados pela seguinte relação \(AX=\lambda X\). Uma matriz \(p_xp\) tem p raízes e p vetores característicos e a relação pode ser escrita como \(AX_i=\lambda_i X_i\) o que, intituitivamente, significa que existem constantes \(\lambda_i\) e vetores \(X_i\), tais que a multiplicação da matriz pelo vetor é igual à multiplicação do vetor por uma constante.
As raízes e vetores característicos são encontrados a partir de
\[ AX=\lambda X \]
\[ AX - \lambda X= 0 \] \[ (A- \lambda I)X= 0 \]
sendo que a equação é verdadeira para qualquer \(\lambda\) se \(X=0\), mas esta solução não interessa. Para se ter uma solução \(X \neq 0\), a inversa da equação característica \((A- \lambda I)\) não deve existir e, para isto, o seu determinante precisa ser igual a zero. Assim, pode-se entender \(\lambda\) (raízes características) como os valores que zeram o determinante da equação característica.
Os vetores característicos não são únicos, devendo ser normalizados. Para cada raiz característica existe um vetor característico que é encontrado resolvendo a expressão \((A-\lambda_i I)X_i=0\).
As raízes características possuem um conjunto de propriedades:
Considere um vetor de p variáveis padronizadas dada por
\[ \mathbf{Z'}=\left[\begin{array}{llll} Z_1 &Z_2 &\dots &Z_p \end{array}\right] \] os CP’s são combinações lineares dos \(Z's\)
\[ Y_j=a'_jZ=a_{j1}Z_1+a_{j2}Z_2+\dots+a_{jp}Z_p \]
sendo que é possível ter até p CP’s, com o primeiro tendo a maior variância, o segundo CP tendo a segunda maior variância e sendo ortogonal ao primeiro, etc. Neste caso, a variância de \(Z_i\) é dada por \(V(Z_i)=a_i'\sum a_i\) e o que deve ser feito é encontrar os coeficientes de \(a_i\) das combinaçoes lineares de forma a satisfazer as condições acima definidas.
É possível demonstrar (LIMA, 2015) que a solução se resume em encontrar as raízes características \((\lambda_i)\) e os vetores característicos \((a_i)\) da matriz var-cov \((\sum)\) das variáveis. Os coeficientes dos CP’s são os elementos dos vetores característicos \((a_i)\).
Além disso, é possível demonstrar que \(\sum a_i= \lambda a_i\) e, consequentemente,
\[ V(Z_i)=a_i'\sum a_i = a_i'\lambda a_i = \lambda a_i'a_i \]
e que a \(V(Z_i) = \lambda _i\) pois pela ortogonalidade \(a_i'a_i =1\) (\(a_i'a_i=\sum_{p=1}^ja_{jp}^2\)), o que significa que a variância do componente i é igual a sua raiz característica.
Finalmente, dado que \(a_i'a_k =0\), a covariância entre os CP’s é igual a zero, ou seja, não são correlacionados, são ortogonais.
Como dito anteriormente, com p variáveis é possível ter até p CP’s. Assim, a variância total dos p componentes tem que ser igual a variância total das variáveis Z.
A importância relativa de cada componente é dada pelo percentual de sua variância em relação à variância total, ou seja, é a variância explicada ou captada por ele. Assim, a importância relativa de \(Z_k\) é dada por \(( \lambda_k / \sum_{i}^{p} \lambda_i)100\). Se um, dois ou três componentes captam grande parcela da variância dos dados, pode-se concentrar a análise neste número menor de variáveis.
Como a idéia da ACP é redução da massa de dados para uma dimensão mais adequada para análise, se faz necessário decidir quantos CP’s usar. Com p variáveis deve-se manter k componentes, sendo \(k<q\). A determinação de k não é uma decisão estatística porque não se tem um modelo adequado para tal e por isso é feita de forma prática. Utiliza-se os seguintes critérios:
Dada a importância relativa de cada componente, manter o número de componentes que captam “certa” percentagem da variância dos dados, com \(70\%\) sendo um valor de referência;
Desconsiderar os componentes com variância inferior à variância média das variáveis originais.
Os coeficientes dos componentes indicam a importância da variável para o componente. Isto possibilita atribuir um significado ao componente. Além do coeficiente pode-se calcular a correlação entre o componente e a variável. A correlação entre \(Y_j\) e a variável padronizada \(Z_i\) é igual a:
\[ r_{Y_i,Z_k}=\frac{a_{ik}}{\sqrt{\sigma_k^2}}\sqrt{\lambda_i} \] e, então, as variáveis \(\mathbf{Z}\) com os maiores coeficientes na componente principal \(\mathbf{Y_j}\) são as mais correlacionadas com a componente. A matriz de correlações entre as variáveis e os componentes é bastante importante para entender os componentes e lhes atribuir um nome. É possível também testar a significância estatística de cada peso ou coeficiente do componente. A hipótese nula é de que o coeficiente é estatisticamente igual a zero.
Escore é o valor de \(\mathbf{Y_i}\) para cada observação. Estes servem para, por exemplo:
#Direcionado o R para o Diretorio a ser trabalhado
#setwd('/Users/jricardofl/Dropbox/tempecon/multivariada')
#Lendo os dados no R
library(car)
library(tidyverse)
library(corrplot)
library(graphics)
library(ade4)
library(grid)
library(MVar.pt)
library(factoextra)
data(mtcars)
#Format
#A data frame with 32 observations on 11 (numeric) variables.
#[, 1] mpg Milhas/(EUA) galão
#[, 2] cil Número de cilindros
#[, 3] disp Cilindradas cc
#[, 4] HP Potência bruta
#[, 5] drat Relação do eixo traseiro
#[, 6] Peso em peso (1000 lbs)
#[, 7] qsex tempo 1/4 de milha
#[, 8] vs Motor (0 = em forma de V, 1 = reto)
#[, 9] am Transmissão (0 = automática, 1 = manual)
#[,10] gear Número de marchas para frente
#[,11] carb Número de carburadores
# Criando um objeto
dados <- mtcars
summary(dados) # estatística descritiva dos dados
## mpg cyl disp hp
## Min. :10.40 Min. :4.000 Min. : 71.1 Min. : 52.0
## 1st Qu.:15.43 1st Qu.:4.000 1st Qu.:120.8 1st Qu.: 96.5
## Median :19.20 Median :6.000 Median :196.3 Median :123.0
## Mean :20.09 Mean :6.188 Mean :230.7 Mean :146.7
## 3rd Qu.:22.80 3rd Qu.:8.000 3rd Qu.:326.0 3rd Qu.:180.0
## Max. :33.90 Max. :8.000 Max. :472.0 Max. :335.0
## drat wt qsec vs
## Min. :2.760 Min. :1.513 Min. :14.50 Min. :0.0000
## 1st Qu.:3.080 1st Qu.:2.581 1st Qu.:16.89 1st Qu.:0.0000
## Median :3.695 Median :3.325 Median :17.71 Median :0.0000
## Mean :3.597 Mean :3.217 Mean :17.85 Mean :0.4375
## 3rd Qu.:3.920 3rd Qu.:3.610 3rd Qu.:18.90 3rd Qu.:1.0000
## Max. :4.930 Max. :5.424 Max. :22.90 Max. :1.0000
## am gear carb
## Min. :0.0000 Min. :3.000 Min. :1.000
## 1st Qu.:0.0000 1st Qu.:3.000 1st Qu.:2.000
## Median :0.0000 Median :4.000 Median :2.000
## Mean :0.4062 Mean :3.688 Mean :2.812
## 3rd Qu.:1.0000 3rd Qu.:4.000 3rd Qu.:4.000
## Max. :1.0000 Max. :5.000 Max. :8.000
# Retirando as variáveis binárias
dados <- mtcars %>% select(-vs, -am)
# Verificação da estrutura dos dados
str(dados)
## 'data.frame': 32 obs. of 9 variables:
## $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
## $ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
## $ disp: num 160 160 108 258 360 ...
## $ hp : num 110 110 93 110 175 105 245 62 95 123 ...
## $ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
## $ wt : num 2.62 2.88 2.32 3.21 3.44 ...
## $ qsec: num 16.5 17 18.6 19.4 17 ...
## $ gear: num 4 4 4 3 3 3 3 4 4 4 ...
## $ carb: num 4 4 1 1 2 1 4 2 2 4 ...
head(dados)
## mpg cyl disp hp drat wt qsec gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 3 1
tail(dados)
## mpg cyl disp hp drat wt qsec gear carb
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.7 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.9 5 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.5 5 4
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.5 5 6
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.6 5 8
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.6 4 2
# ESTIMACAO DAS ESTATISTICAS DESCRITIVAS E CALCULO DA MATRIZ DE CORRELAÇOES
summary(dados) #sem as variáveis binárias
## mpg cyl disp hp
## Min. :10.40 Min. :4.000 Min. : 71.1 Min. : 52.0
## 1st Qu.:15.43 1st Qu.:4.000 1st Qu.:120.8 1st Qu.: 96.5
## Median :19.20 Median :6.000 Median :196.3 Median :123.0
## Mean :20.09 Mean :6.188 Mean :230.7 Mean :146.7
## 3rd Qu.:22.80 3rd Qu.:8.000 3rd Qu.:326.0 3rd Qu.:180.0
## Max. :33.90 Max. :8.000 Max. :472.0 Max. :335.0
## drat wt qsec gear
## Min. :2.760 Min. :1.513 Min. :14.50 Min. :3.000
## 1st Qu.:3.080 1st Qu.:2.581 1st Qu.:16.89 1st Qu.:3.000
## Median :3.695 Median :3.325 Median :17.71 Median :4.000
## Mean :3.597 Mean :3.217 Mean :17.85 Mean :3.688
## 3rd Qu.:3.920 3rd Qu.:3.610 3rd Qu.:18.90 3rd Qu.:4.000
## Max. :4.930 Max. :5.424 Max. :22.90 Max. :5.000
## carb
## Min. :1.000
## 1st Qu.:2.000
## Median :2.000
## Mean :2.812
## 3rd Qu.:4.000
## Max. :8.000
desvpad <- sapply(dados, sd) #para calcular o desvio-padrao
round(desvpad,2)
## mpg cyl disp hp drat wt qsec gear carb
## 6.03 1.79 123.94 68.56 0.53 0.98 1.79 0.74 1.62
cov(dados) #covariância
## mpg cyl disp hp drat wt
## mpg 36.324103 -9.1723790 -633.09721 -320.732056 2.19506351 -5.1166847
## cyl -9.172379 3.1895161 199.66028 101.931452 -0.66836694 1.3673710
## disp -633.097208 199.6602823 15360.79983 6721.158669 -47.06401915 107.6842040
## hp -320.732056 101.9314516 6721.15867 4700.866935 -16.45110887 44.1926613
## drat 2.195064 -0.6683669 -47.06402 -16.451109 0.28588135 -0.3727207
## wt -5.116685 1.3673710 107.68420 44.192661 -0.37272073 0.9573790
## qsec 4.509149 -1.8868548 -96.05168 -86.770081 0.08714073 -0.3054816
## gear 2.135685 -0.6491935 -50.80262 -6.358871 0.27598790 -0.4210806
## carb -5.363105 1.5201613 79.06875 83.036290 -0.07840726 0.6757903
## qsec gear carb
## mpg 4.50914919 2.1356855 -5.36310484
## cyl -1.88685484 -0.6491935 1.52016129
## disp -96.05168145 -50.8026210 79.06875000
## hp -86.77008065 -6.3588710 83.03629032
## drat 0.08714073 0.2759879 -0.07840726
## wt -0.30548161 -0.4210806 0.67579032
## qsec 3.19316613 -0.2804032 -1.89411290
## gear -0.28040323 0.5443548 0.32661290
## carb -1.89411290 0.3266129 2.60887097
# Matriz de Correlacoes
matcor <- cor(dados)
print(matcor, digits=4)
## mpg cyl disp hp drat wt qsec gear carb
## mpg 1.0000 -0.8522 -0.8476 -0.7762 0.68117 -0.8677 0.4187 0.4803 -0.55093
## cyl -0.8522 1.0000 0.9020 0.8324 -0.69994 0.7825 -0.5912 -0.4927 0.52699
## disp -0.8476 0.9020 1.0000 0.7909 -0.71021 0.8880 -0.4337 -0.5556 0.39498
## hp -0.7762 0.8324 0.7909 1.0000 -0.44876 0.6587 -0.7082 -0.1257 0.74981
## drat 0.6812 -0.6999 -0.7102 -0.4488 1.00000 -0.7124 0.0912 0.6996 -0.09079
## wt -0.8677 0.7825 0.8880 0.6587 -0.71244 1.0000 -0.1747 -0.5833 0.42761
## qsec 0.4187 -0.5912 -0.4337 -0.7082 0.09120 -0.1747 1.0000 -0.2127 -0.65625
## gear 0.4803 -0.4927 -0.5556 -0.1257 0.69961 -0.5833 -0.2127 1.0000 0.27407
## carb -0.5509 0.5270 0.3950 0.7498 -0.09079 0.4276 -0.6562 0.2741 1.00000
corrplot(cor(dados), order="hclust", tl.col="black", tl.cex = .75)
#Análise de componentes principais - dados devem ser padronizados
#Padronizacao dos dados
dados.pad <-as.data.frame(scale(dados))
#Analise de Componentes principais com prcomp
resultados.pca <- prcomp(dados.pad, scale = TRUE) #ACP
#Raizes Caracteristicas - 1 Forma
(resultados.pca$sdev)^2
## [1] 5.65593947 2.08210029 0.50421482 0.26502753 0.18315864 0.12379319 0.10506192
## [8] 0.05851375 0.02219038
summary(resultados.pca)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6 PC7
## Standard deviation 2.3782 1.4429 0.71008 0.51481 0.42797 0.35184 0.32413
## Proportion of Variance 0.6284 0.2313 0.05602 0.02945 0.02035 0.01375 0.01167
## Cumulative Proportion 0.6284 0.8598 0.91581 0.94525 0.96560 0.97936 0.99103
## PC8 PC9
## Standard deviation 0.2419 0.14896
## Proportion of Variance 0.0065 0.00247
## Cumulative Proportion 0.9975 1.00000
sum((resultados.pca$sdev)^2) #traco da matriz
## [1] 9
#É possivel escolher o número de CP com base no Autovalor >1
(resultados.pca$sdev^2)
## [1] 5.65593947 2.08210029 0.50421482 0.26502753 0.18315864 0.12379319 0.10506192
## [8] 0.05851375 0.02219038
# Gráfico do percentual de variância explicada
screeplot(resultados.pca, type="lines")
fviz_eig(resultados.pca)
Se observa que 62,84% da variabilidade total dos dados são explicados pela primeira componente principal. Além disso, a segunda componente principal explica 23,13% da variação total. As duas primeiras componentes principais explicam juntas 85,98% da variabilidade total dos dados.
#Resultados das combinações lineares
resultados.pca
## Standard deviations (1, .., p=9):
## [1] 2.3782219 1.4429485 0.7100809 0.5148082 0.4279704 0.3518426 0.3241326
## [8] 0.2418962 0.1489644
##
## Rotation (n x k) = (9 x 9):
## PC1 PC2 PC3 PC4 PC5 PC6
## mpg -0.3931477 0.02753861 -0.22119309 -0.006126378 -0.3207620 0.72015586
## cyl 0.4025537 0.01570975 -0.25231615 0.040700251 0.1171397 0.22432550
## disp 0.3973528 -0.08888469 -0.07825139 0.339493732 -0.4867849 -0.01967516
## hp 0.3670814 0.26941371 -0.01721159 0.068300993 -0.2947317 0.35394225
## drat -0.3118165 0.34165268 0.14995507 0.845658485 0.1619259 -0.01536794
## wt 0.3734771 -0.17194306 0.45373418 0.191260029 -0.1874822 -0.08377237
## qsec -0.2243508 -0.48404435 0.62812782 -0.030329127 -0.1482495 0.25752940
## gear -0.2094749 0.55078264 0.20658376 -0.282381831 -0.5624860 -0.32298239
## carb 0.2445807 0.48431310 0.46412069 -0.214492216 0.3997820 0.35706914
## PC7 PC8 PC9
## mpg -0.38138068 -0.12465987 0.11492862
## cyl -0.15893251 0.81032177 0.16266295
## disp -0.18233095 -0.06416707 -0.66190812
## hp 0.69620751 -0.16573993 0.25177306
## drat 0.04767957 0.13505066 0.03809096
## wt -0.42777608 -0.19839375 0.56918844
## qsec 0.27622581 0.35613350 -0.16873731
## gear -0.08555707 0.31636479 0.04719694
## carb -0.20604210 -0.10832772 -0.32045892
#Escores para cada observação
resultados.pca$x # valores das componentes principais
## PC1 PC2 PC3 PC4 PC5
## Mazda RX4 -0.66422351 1.1734476 -0.20431724 -0.12601751 0.75200784
## Mazda RX4 Wag -0.63719807 0.9769448 0.11077779 -0.08567709 0.65668822
## Datsun 710 -2.29973601 -0.3265893 -0.21014955 -0.10862524 -0.07622329
## Hornet 4 Drive -0.21529670 -1.9768101 -0.32946822 -0.30806225 -0.24391787
## Hornet Sportabout 1.58697405 -0.8287285 -1.03299254 0.14738418 -0.22270405
## Valiant 0.04960512 -2.4466838 0.11177774 -0.87154914 -0.12574876
## Duster 360 2.71439677 0.3610529 -0.65206041 0.09633337 0.29674234
## Merc 240D -2.04370658 -0.8006412 0.84898795 -0.27451338 -0.26307848
## Merc 230 -2.29506729 -1.3056004 1.96848450 0.05055875 -0.45988113
## Merc 280 -0.38252133 0.5811211 0.88632274 0.07026946 0.45835852
## Merc 280C -0.36652708 0.4121971 1.14860950 0.06150898 0.48309076
## Merc 450SE 1.88466875 -0.7241198 -0.20604588 -0.21856675 0.27996207
## Merc 450SL 1.67107231 -0.7144354 -0.32644071 -0.28933625 0.28061777
## Merc 450SLC 1.77692371 -0.8411687 -0.08557921 -0.28421711 0.34961695
## Cadillac Fleetwood 3.64958983 -0.9480878 0.88315862 0.21645793 -0.34788247
## Lincoln Continental 3.71033756 -0.8426945 0.93230325 0.34099021 -0.34260485
## Chrysler Imperial 3.33196300 -0.4805609 0.67061959 0.65189724 -0.43940743
## Fiat 128 -3.45236266 -0.4327074 -0.22604214 0.10018032 -0.33470301
## Honda Civic -3.85477722 0.7084152 -0.22670973 1.19340342 0.53954318
## Toyota Corolla -3.85488283 -0.3872111 -0.25488964 0.21962306 -0.30372397
## Toyota Corona -1.90375523 -1.5725638 0.06620424 0.07989679 0.50126570
## Dodge Challenger 1.80402354 -1.1340965 -1.00776416 -0.58796239 0.09903732
## AMC Javelin 1.46483534 -0.9777629 -0.76680342 -0.03308788 0.26871378
## Camaro Z28 2.60135738 0.7649595 -0.48915140 0.95247550 0.53065965
## Pontiac Firebird 1.87424485 -0.9791561 -0.89787633 0.22438738 -0.50770999
## Fiat X1-9 -3.14830645 -0.2552569 -0.36230545 0.06406082 0.03361267
## Porsche 914-2 -2.77939557 1.6373369 -0.35969974 0.31886540 -0.43251030
## Lotus Europa -2.90895427 1.3962368 -0.91635036 -0.90254314 -0.75861156
## Ford Pantera L 1.54812696 3.0206982 -0.51945216 0.86560850 -0.86048411
## Ferrari Dino 0.08049995 2.8346567 0.34481747 -1.14659658 0.29944552
## Maserati Bora 2.96252801 3.9993896 0.70296512 -0.73000448 -0.22756074
## Volvo 142E -1.90443632 0.1084190 0.39906976 0.31285789 0.11738974
## PC6 PC7 PC8 PC9
## Mazda RX4 -0.12506777 -0.42357334 -0.003259165 -0.167051112
## Mazda RX4 Wag -0.06619437 -0.44849307 0.056643244 -0.071592094
## Datsun 710 -0.56693648 0.38612406 -0.202035744 0.114505030
## Hornet 4 Drive 0.08382435 0.03299362 -0.023714111 -0.145255757
## Hornet Sportabout 0.18280435 -0.05793795 0.152342587 -0.154646072
## Valiant -0.23043022 0.22451528 0.098663134 -0.004233901
## Duster 360 0.27763557 0.44227307 -0.306373481 -0.186980810
## Merc 240D -0.19042527 -0.39416400 -0.187088365 -0.010461330
## Merc 230 0.20443847 0.53713423 0.413455512 -0.169005773
## Merc 280 -0.07984989 -0.26113412 0.204105964 0.110461785
## Merc 280C -0.16066456 -0.07979514 0.352641772 0.027108266
## Merc 450SE 0.17135058 -0.08914480 0.092140434 0.396034809
## Merc 450SL 0.33682412 0.03346598 0.182323579 0.196526577
## Merc 450SLC 0.13926264 0.20632469 0.295340402 0.147796262
## Cadillac Fleetwood -0.24002207 -0.31053111 -0.171865268 -0.251117818
## Lincoln Continental -0.22646211 -0.28589695 -0.239313268 -0.028994385
## Chrysler Imperial 0.31045750 -0.38304409 -0.359765688 0.223097923
## Fiat 128 0.57303421 -0.24650594 -0.066340528 0.220271421
## Honda Civic 0.37207104 -0.20055288 0.087333576 -0.241702175
## Toyota Corolla 0.83750899 -0.10186868 0.104053562 0.042833437
## Toyota Corona -0.07212137 0.74680802 -0.408144457 -0.082722856
## Dodge Challenger -0.33920894 -0.14045443 0.156086022 -0.050247532
## AMC Javelin -0.31479492 0.03753417 0.370979414 -0.043466032
## Camaro Z28 0.05970074 0.38212238 -0.289612990 0.082069840
## Pontiac Firebird 0.20785973 -0.32709161 0.027471038 -0.130958896
## Fiat X1-9 -0.09586730 0.10352270 -0.020876499 0.021084764
## Porsche 914-2 -0.69006515 -0.26313120 -0.105695694 0.085027267
## Lotus Europa 0.05473409 -0.03491081 -0.236552376 -0.046341050
## Ford Pantera L -0.50704173 0.37940892 0.548070377 0.053196712
## Ferrari Dino -0.08124583 -0.26924964 -0.123537656 -0.047915313
## Maserati Bora 0.65580986 0.49422807 -0.082329298 -0.053112079
## Volvo 142E -0.48091826 0.31102454 -0.315146031 0.165790892
#Correlaçoes entre as variaveis e os escores
cor(dados, resultados.pca$x)
## PC1 PC2 PC3 PC4 PC5 PC6
## mpg -0.9349924 0.03973679 -0.15706498 -0.00315391 -0.13727663 0.253381487
## cyl 0.9573620 0.02266837 -0.17916487 0.02095282 0.05013231 0.078927259
## disp 0.9449932 -0.12825603 -0.05556481 0.17477417 -0.20832951 -0.006922559
## hp 0.8730011 0.38875010 -0.01222162 0.03516191 -0.12613645 0.124531951
## drat -0.7415688 0.49298721 0.10648022 0.43535196 0.06929950 -0.005407096
## wt 0.8882114 -0.24810498 0.32218796 0.09846224 -0.08023684 -0.029474687
## qsec -0.5335561 -0.69845105 0.44602154 -0.01561368 -0.06344640 0.090609806
## gear -0.4981777 0.79475097 0.14669117 -0.14537249 -0.24072736 -0.113638954
## carb 0.5816671 0.69883885 0.32956322 -0.11042236 0.17109485 0.125632122
## PC7 PC8 PC9
## mpg -0.12361790 -0.03015474 0.017120269
## cyl -0.05151520 0.19601372 0.024230983
## disp -0.05909940 -0.01552177 -0.098600723
## hp 0.22566353 -0.04009185 0.037505214
## drat 0.01545450 0.03266824 0.005674196
## wt -0.13865616 -0.04799069 0.084788796
## qsec 0.08953378 0.08614732 -0.025135847
## gear -0.02773183 0.07652743 0.007030663
## carb -0.06678495 -0.02620406 -0.047736960
fviz_pca_ind(resultados.pca,
col.ind = "cos2",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE,
legend.title = "Representation")
fviz_pca_var(resultados.pca,
col.var = "contrib",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE,
legend.title = "Contribution")
fviz_pca_biplot(resultados.pca,
repel = TRUE,
col.var = "#2E9FDF",
col.ind = "#696969")
dados <- mtcars %>% mutate(
am = case_when(am == 0 ~ "Automatic",
TRUE ~ "Manual"))
fviz_pca_ind(resultados.pca,
col.ind = dados$am,
palette = c("#00AFBB", "#FC4E07"),
addEllipses = TRUE,
legend.title = "Engine shape",
repel = TRUE)
fviz_pca_biplot(resultados.pca,
repel = TRUE,
col.var = "black",
col.ind = as.factor(dados$am),
addEllipses = TRUE,
legend.title = "Transmissão")
Análise Fatorial é uma técnica estatística para redução de dados. Ela reduz o número de variáveis (p) na análise, descrevendo combinações lineares destas (fatores) que contém a maior parte das informações das variáveis originais e que possam ter interpretações significativas. Estes fatores não são correlacionados entre si.
O “fator” é uma variável latente (não observada) que representa uma característica marcante dos dados. O objetivo da Análise Fatorial é identificar os r<p fatores e relacioná-los com as variáveis originais.
Segundo Mingoti (2005, p. 99), “a análise fatorial tem como objetivo principal descrever a variabilidade original do vetor de variáveis X, em termos de um número menor r de variáveis aleatórias, chamadas de fatores comuns e que estão relacionadas com o vetor original X através de um modelo linear. Neste modelo, parte da variabilidade de X é atribuída aos fatores comuns, sendo o restante da variabilidade de X atribuído às variáveis que não foram incluídas no modelo, ou seja, ao erro aleatório”.
Existem dois enfoques diferentes para Análise Fatorial: A Análise Fatorial Exploratória e a Análise Fatorial Confirmatória. A Análise Fatorial Exploratória objetiva determinar dimensões latentes dos dados denominadas fatores partindo-se de um conjunto de variáveis e a solução conduz a uma relação de todas as variáveis com todos os fatores. Na Análise Fatorial Confirmatória parte-se de um conjunto de variáveis e de um conjunto de hipóteses sobre o número de fatores e sobre quais variáveis se relacionam com quais fatores. O objetivo da análise é “confirmar” se as variáveis formam os fatores da forma como foi assumido. A formulação do modelo é baseada em uma teoria que será testada com a análise. O modelo especifica quais variáveis são relacionadas com quais fatores e se os fatores são correlacionados. A definição dos fatores é feita antes do ajustamento do modelo.
Seja \(\mathbf{x}\) um vetor aleatório \(p_x1\) com média \(\mathbf{\mu}\) e matriz de variância-covariância dada por \(\mathbf{\Sigma}\). A variância total de cada variável pode ser separada em três parcelas: fatores comuns (influenciam duas ou mais variáveis), fatores específicos (contribuem para a variação de uma única variável) e um erro.
Assim, a variação total vai ser a soma da variação comum (comunalidade), da variação específica (unicidade) e do erro.
\[ \mathbf{x}=\mathbf{\Lambda} \mathbf{f}+ \mathbf{\epsilon} \]
onde \(\mathbf{f}\) é um vetor aleatório de ordem \(k_x1\)(\(k<p\)), com os elementos \(f_1, \dots, f_k\) sendo denominados fatores comuns (comunalidade); \(\Lambda\) é uma matriz de constantes desconhecidas \(p_xk\) chamadas de cargas fatoriais (ou coeficientes de correlação entre as variáveis e os fatores quando as variáveis são padronizadas); e os elementos \(\epsilon_1, \dots, \epsilon_p\) do \(p_x1\) vetor aleatório \(\mathbf{\epsilon}\) são chamados de fatores específicos (unicidade) e erro. Assume-se que \(\mathbf{f}\) e \(\mathbf{\epsilon}\) não são correlacionados.
\[\begin{cases} X_1=a_{11}F_1+a_{12}F_2+a_{13}F_3+ \dots +a_{1r}F_r+\epsilon_1 \\ X_2=a_{21}F_1+a_{22}F_2+a_{23}F_3+ \dots +a_{2r}F_r+\epsilon_2 \\ X_3=a_{31}F_1+a_{32}F_2+a_{33}F_3+ \dots +a_{3r}F_r+\epsilon_3 \\ . \\ . \\ . \\ X_p=a_{p1}F_1+a_{p2}F_2+a_{p3}F_3+ \dots +a_{pr}F_r+\epsilon_p \\ \end{cases}\]O modelo tem como objetivo explicar o comportamento das p variáveis em função de r<p fatores comuns (desconhecidos) e de um termo de erro composto de unicidade (fatores específicos) e erro aleatório. O processo de estimação consiste em determinar a matriz de cargas fatoriais \(\mathbf{\Lambda}\).
Os pressupostos do Modelo de Análise Fatorial podem ser resumidos em:
\(\mathbf{f} \sim (\mathbf{0},\mathbf{I})\), ou seja, os fatores possuem média zero e variância constante igual a um e não são autocorrelacionados;
\(\epsilon \sim (\mathbf{0},\mathbf{\Psi})\), em que \(\mathbf{\Psi}=diag(\psi_1,\dots,\psi_p)\), ou seja, os erros tem média zero e podem ter variâncias diferentes, mas não correlacionadas;
\(\mathbf{f}\) e \(\mathbf{\epsilon}\) são independentes, ou seja, os fatores comuns são independentes dos fatores específicos e erros.
A Análise Fatorial pode ser feita com a matriz de variâncias e covariâncias ou com a matriz de correlações. Como normalmente é recomendado o uso de variáveis padronizadas para contornar o problema de unidades de medidas diferentes e a influência que uma variável com variância grande pode ter na determinação das cargas fatoriais, a Análise Fatorial é, quase sempre, feita com a matriz de correlações \(\mathbf{\Sigma}\) .
No modelo fatorial, a matriz \(\mathbf{\Sigma}\) é decomposta como
\[ \mathbf{\Sigma}=E(xx') \]
\[ \mathbf{\Sigma}=E[(\mathbf{\Lambda} \mathbf{f}+ \mathbf{\epsilon})(\mathbf{\Lambda} \mathbf{f}+ \mathbf{\epsilon})'] \]
sendo que é possível demonstrar que o resultado desta decomposição é
\[ \mathbf{\Sigma}=\mathbf{\Lambda}\mathbf{\Phi}\mathbf{\Lambda}'+\mathbf{\Psi} \] Este resultado, que é derivado com base nas pressuposições do modelo, diz que a matriz de correlações pode ser decomposta em duas parcelas, uma relacionada com a comunalidade e outra com a unicidade. O modelo assume que os fatores não são correlacionados \(\mathbf{\Phi}=\mathbf{I}\).
Um termo importante na Análise Fatorial é a comunalidade, ou seja, o somatório das correlações dos fatores com a variável “i”.
\[ \mathbf{h_i^2}=a_{i1}^2+a_{i2}^2+\dots+a_{ir}^2 \]
A Unicidade (\(\mathbf{\Psi}\)) é dada por \(\mathbf{\Psi}=1-\mathbf{h_i^2}\).
A comunalidade é a parcela da variância de X explicada pelos r fatores e a unicidade é a parcela não explicada.
Dado o modelo
\[ \mathbf{x}=\mathbf{\Lambda} \mathbf{f}+ \mathbf{\epsilon} \] pode-se entender o x como a variável dependente e o f como as variáveis explicativas, \(\Lambda\) como como os coefientes e \(\epsilon\) como os erros de um modelo de regressão múltipla.
O problema, então, é estimar \(\mathbf{\Lambda}\) e \(\mathbf{\Psi}\) que reproduzam \(\mathbf{\Sigma}\) com um número de fatores r menor que o número de variáveis originais p, mas apenas o x é conhecido.
Existem diversas formas de estimar as cargas fatoriais sendo que componentes principais e máxima verossimilhança são as principais. As explicações mais detalhadas podem ser encontradas em Mingoti (2005).
O método dos Componentes Principais é o mais usado e tem como base o uso das raízes características e vetores característicos relacionados com r<p componentes para estimar \(\Lambda\). O método de Máxima Verossimilhança maximiza uma função de verossimilhança formada com a pressuposição de que o vetor de variáveis aleatórias X segue distribuição normal p-variada com vetor de médias \(\mu\) e matriz de variâncias e covariâncias \(\mathbf{\Sigma}\).
O método dos componentes principais parte da decomposição espectral da matriz de variâncias e covariâncias \(\mathbf{\Sigma}\). Assim, é necessário informar que a decomposição espectral de uma matriz é uma operação que relaciona a matriz com seus autovalores e seus autovetores.
Considere A uma matriz \(p_xp\) simétrica com raízes características \(\lambda_p\) e vetores característicos \(x_p\). A decomposição espectral de A é dada por
\[ A=\sum \lambda_i x_i x_i' \] com i variando de 1 a p. A decomposição pode ser representada por \(A=P \Lambda P'\) em que P é uma matriz cujas colunas são os vetores característicos normalizados de A e \(\Lambda\) é uma matriz diagonal com as raízes características de A na diagonal principal. Dessa relação tem-se, também, que \(\Lambda=PAP'\) que é uma operação denominada diagonalização de A.
Pelo teorema da decomposição espectral, a matriz de correlação amostral ou a matriz de variâncias e covariâncias pode ser decomposta como a soma de p matrizes, cada uma relacionada com um autovetor da matriz \(\mathbf{\Sigma}\).
\[ \Sigma=P \Lambda P'=\sum \lambda_i x_i x_i' \] com i variando de 1 a p. Com p componentes, a matriz \(\mathbf{\Sigma}\) é totalmente reproduzida. Para r < p, pode-se escrever
\[ \Sigma=P \Lambda P'=\sum_{j=1}^r \lambda_j x_j x_j' + \sum_{j=r+1}^p \lambda_j x_j x_j' \]
Cada parcela desta soma envolve uma matriz de dimensão \(p_xp\) correspondente a informação da j-ésima componente fazendo com que a variabilidade das variáveis seja representada pela soma da variabilidade relacionada com cada componente. Assim, pode-se escrever
\[ \Sigma=\sum_{j=1}^r \lambda_j x_j x_j' + \sum_{j=r+1}^p \lambda_j x_j x_j'=P_1 \Lambda_1 P_1'+P_2 \Lambda_2 P_2' \] e pode-se considerar uma aproximação da matriz de correlações \(\mathbf{\Sigma}\) dada por
\[ \mathbf{\Sigma} \approx P_1 \Lambda_1 P_1'=\sum_{j=1}^r \lambda_j x_j x_j' \] o que possibilita estimar as matrizes \(\Lambda\) e \(\Psi\) por meio de raízes e vetores característicos de \(\mathbf{\Sigma}\).
Pela decomposição espectral ainda é possível escrever
\[ \mathbf{\Sigma} \approx P_1 \Lambda_1^{1/2} \Lambda_1^{1/2}P_1' \] e definir por \(A=P_1 \Lambda_1^{1/2}\) e por \(A'=\Lambda_1^{1/2}P_1'\)
Esta aproximação de \(\mathbf{\Sigma}\) considera que os fatores específicos são de menor importância. Incluindo os fatores específicos a aproximação de \(\mathbf{\Sigma}\) fica
\[ \mathbf{\Sigma} \approx AA' + \Psi \] e a matriz \(\Psi\), que é diagonal, pode ser estimada por
\[ \Psi = diag(R-AA') \]
A matriz de resíduos resultante do ajustamento do modelo é definida por
\[ RES= \mathbf{\Sigma} - (AA'+\Psi) \]
que serve como critério de avaliação do modelo. Valores pequenos, próximos de zero, indicam bom ajustamento. Esta matriz só é nula quando todos os “p” fatores são extraídos, o que não é o desejado na prática. Através destes procedimentos os elementos da diagonal da matriz \(\mathbf{\Sigma}\) (variâncias) são exatamente reproduzidos por \(AA'+\Psi\). Entretanto, o mesmo não ocorre para os elementos fora da diagonal principal (correlações).
Todo o conhecimento de Componentes Principais se aplica neste caso com os componentes agora denominados fatores.
#Direcionado o R para o Diretorio a ser trabalhado
setwd('/Users/jricardofl/Dropbox/tempecon/multivariada')
library(tidyverse)
library(skimr)
library(psych)
library(REdaS)
#Lendo os dados no R
dados <- read.csv2('winequality-red.csv', sep=";", dec=".")
dados <- dados %>%
select(-quality) #retira a variável quality
attach(dados)
glimpse(dados)
## Rows: 1,599
## Columns: 11
## $ fixed.acidity <dbl> 7.4, 7.8, 7.8, 11.2, 7.4, 7.4, 7.9, 7.3, 7.8, 7.5…
## $ volatile.acidity <dbl> 0.700, 0.880, 0.760, 0.280, 0.700, 0.660, 0.600, …
## $ citric.acid <dbl> 0.00, 0.00, 0.04, 0.56, 0.00, 0.00, 0.06, 0.00, 0…
## $ residual.sugar <dbl> 1.9, 2.6, 2.3, 1.9, 1.9, 1.8, 1.6, 1.2, 2.0, 6.1,…
## $ chlorides <dbl> 0.076, 0.098, 0.092, 0.075, 0.076, 0.075, 0.069, …
## $ free.sulfur.dioxide <dbl> 11, 25, 15, 17, 11, 13, 15, 15, 9, 17, 15, 17, 16…
## $ total.sulfur.dioxide <dbl> 34, 67, 54, 60, 34, 40, 59, 21, 18, 102, 65, 102,…
## $ density <dbl> 0.9978, 0.9968, 0.9970, 0.9980, 0.9978, 0.9978, 0…
## $ pH <dbl> 3.51, 3.20, 3.26, 3.16, 3.51, 3.51, 3.30, 3.39, 3…
## $ sulphates <dbl> 0.56, 0.68, 0.65, 0.58, 0.56, 0.56, 0.46, 0.47, 0…
## $ alcohol <dbl> 9.4, 9.8, 9.8, 9.8, 9.4, 9.4, 9.4, 10.0, 9.5, 10.…
head(dados)
## fixed.acidity volatile.acidity citric.acid residual.sugar chlorides
## 1 7.4 0.70 0.00 1.9 0.076
## 2 7.8 0.88 0.00 2.6 0.098
## 3 7.8 0.76 0.04 2.3 0.092
## 4 11.2 0.28 0.56 1.9 0.075
## 5 7.4 0.70 0.00 1.9 0.076
## 6 7.4 0.66 0.00 1.8 0.075
## free.sulfur.dioxide total.sulfur.dioxide density pH sulphates alcohol
## 1 11 34 0.9978 3.51 0.56 9.4
## 2 25 67 0.9968 3.20 0.68 9.8
## 3 15 54 0.9970 3.26 0.65 9.8
## 4 17 60 0.9980 3.16 0.58 9.8
## 5 11 34 0.9978 3.51 0.56 9.4
## 6 13 40 0.9978 3.51 0.56 9.4
tail(dados)
## fixed.acidity volatile.acidity citric.acid residual.sugar chlorides
## 1594 6.8 0.620 0.08 1.9 0.068
## 1595 6.2 0.600 0.08 2.0 0.090
## 1596 5.9 0.550 0.10 2.2 0.062
## 1597 6.3 0.510 0.13 2.3 0.076
## 1598 5.9 0.645 0.12 2.0 0.075
## 1599 6.0 0.310 0.47 3.6 0.067
## free.sulfur.dioxide total.sulfur.dioxide density pH sulphates alcohol
## 1594 28 38 0.99651 3.42 0.82 9.5
## 1595 32 44 0.99490 3.45 0.58 10.5
## 1596 39 51 0.99512 3.52 0.76 11.2
## 1597 29 40 0.99574 3.42 0.75 11.0
## 1598 32 44 0.99547 3.57 0.71 10.2
## 1599 18 42 0.99549 3.39 0.66 11.0
# Estatística descritiva das variáveis
summary(dados)
## fixed.acidity volatile.acidity citric.acid residual.sugar
## Min. : 4.60 Min. :0.1200 Min. :0.000 Min. : 0.900
## 1st Qu.: 7.10 1st Qu.:0.3900 1st Qu.:0.090 1st Qu.: 1.900
## Median : 7.90 Median :0.5200 Median :0.260 Median : 2.200
## Mean : 8.32 Mean :0.5278 Mean :0.271 Mean : 2.539
## 3rd Qu.: 9.20 3rd Qu.:0.6400 3rd Qu.:0.420 3rd Qu.: 2.600
## Max. :15.90 Max. :1.5800 Max. :1.000 Max. :15.500
## chlorides free.sulfur.dioxide total.sulfur.dioxide density
## Min. :0.01200 Min. : 1.00 Min. : 6.00 Min. :0.9901
## 1st Qu.:0.07000 1st Qu.: 7.00 1st Qu.: 22.00 1st Qu.:0.9956
## Median :0.07900 Median :14.00 Median : 38.00 Median :0.9968
## Mean :0.08747 Mean :15.87 Mean : 46.47 Mean :0.9967
## 3rd Qu.:0.09000 3rd Qu.:21.00 3rd Qu.: 62.00 3rd Qu.:0.9978
## Max. :0.61100 Max. :72.00 Max. :289.00 Max. :1.0037
## pH sulphates alcohol
## Min. :2.740 Min. :0.3300 Min. : 8.40
## 1st Qu.:3.210 1st Qu.:0.5500 1st Qu.: 9.50
## Median :3.310 Median :0.6200 Median :10.20
## Mean :3.311 Mean :0.6581 Mean :10.42
## 3rd Qu.:3.400 3rd Qu.:0.7300 3rd Qu.:11.10
## Max. :4.010 Max. :2.0000 Max. :14.90
skim(dados)
| Name | dados |
| Number of rows | 1599 |
| Number of columns | 11 |
| _______________________ | |
| Column type frequency: | |
| numeric | 11 |
| ________________________ | |
| Group variables | None |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| fixed.acidity | 0 | 1 | 8.32 | 1.74 | 4.60 | 7.10 | 7.90 | 9.20 | 15.90 | ▂▇▂▁▁ |
| volatile.acidity | 0 | 1 | 0.53 | 0.18 | 0.12 | 0.39 | 0.52 | 0.64 | 1.58 | ▅▇▂▁▁ |
| citric.acid | 0 | 1 | 0.27 | 0.19 | 0.00 | 0.09 | 0.26 | 0.42 | 1.00 | ▇▆▅▁▁ |
| residual.sugar | 0 | 1 | 2.54 | 1.41 | 0.90 | 1.90 | 2.20 | 2.60 | 15.50 | ▇▁▁▁▁ |
| chlorides | 0 | 1 | 0.09 | 0.05 | 0.01 | 0.07 | 0.08 | 0.09 | 0.61 | ▇▁▁▁▁ |
| free.sulfur.dioxide | 0 | 1 | 15.87 | 10.46 | 1.00 | 7.00 | 14.00 | 21.00 | 72.00 | ▇▅▁▁▁ |
| total.sulfur.dioxide | 0 | 1 | 46.47 | 32.90 | 6.00 | 22.00 | 38.00 | 62.00 | 289.00 | ▇▂▁▁▁ |
| density | 0 | 1 | 1.00 | 0.00 | 0.99 | 1.00 | 1.00 | 1.00 | 1.00 | ▁▃▇▂▁ |
| pH | 0 | 1 | 3.31 | 0.15 | 2.74 | 3.21 | 3.31 | 3.40 | 4.01 | ▁▅▇▂▁ |
| sulphates | 0 | 1 | 0.66 | 0.17 | 0.33 | 0.55 | 0.62 | 0.73 | 2.00 | ▇▅▁▁▁ |
| alcohol | 0 | 1 | 10.42 | 1.07 | 8.40 | 9.50 | 10.20 | 11.10 | 14.90 | ▇▇▃▁▁ |
O banco de dados é composto por 1599 observações e 12 variáveis: acidez fixa, acidez volátil, ácido cítrico, açucar residual, cloretos, dióxido de enxofre livre, dióxido de enxofre total, densidade, Ph, sulfatos, álcool.
library(corrplot)
corrplot(cor(dados), order="hclust", tl.col="black", tl.cex = .75)
#Obtenção do Modelo Fatorial Ortogonal
#Analise Fatorial - dados devem ser padronizados
#Padronizaçao dos dados
dados.pad <-as.data.frame(scale(dados))
s <- cov(dados.pad) #matriz de cov com var pad = mat correlaçoes origem
#Autovalores e Autovetores da Matriz de Covariancias
lambda <-eigen(s)$values
lambda #
## [1] 3.09913244 1.92590969 1.55054349 1.21323253 0.95929207 0.65960826
## [7] 0.58379122 0.42295670 0.34464212 0.18133317 0.05955831
evec <-eigen(s)$vectors
evec
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 0.48931422 -0.110502738 -0.12330157 0.229617370 0.08261366 0.10147858
## [2,] -0.23858436 0.274930480 -0.44996253 -0.078959783 -0.21873452 0.41144893
## [3,] 0.46363166 -0.151791356 0.23824707 0.079418256 0.05857268 0.06959338
## [4,] 0.14610715 0.272080238 0.10128338 0.372792562 -0.73214429 0.04915555
## [5,] 0.21224658 0.148051555 -0.09261383 -0.666194756 -0.24650090 0.30433857
## [6,] -0.03615752 0.513566812 0.42879287 0.043537818 0.15915198 -0.01400021
## [7,] 0.02357485 0.569486959 0.32241450 0.034577115 0.22246456 0.13630755
## [8,] 0.39535301 0.233575490 -0.33887135 0.174499758 -0.15707671 -0.39115230
## [9,] -0.43851962 0.006710793 0.05769735 0.003787746 -0.26752977 -0.52211645
## [10,] 0.24292133 -0.037553916 0.27978615 -0.550872362 -0.22596222 -0.38126343
## [11,] -0.11323206 -0.386180959 0.47167322 0.122181088 -0.35068141 0.36164504
## [,7] [,8] [,9] [,10] [,11]
## [1,] 0.35022736 0.17759545 -0.194020908 -0.24952314 0.639691452
## [2,] 0.53373510 0.07877531 0.129110301 0.36592473 0.002388597
## [3,] -0.10549701 0.37751558 0.381449669 0.62167708 -0.070910304
## [4,] -0.29066341 -0.29984469 -0.007522949 0.09287208 0.184029964
## [5,] -0.37041337 0.35700936 -0.111338666 -0.21767112 0.053065322
## [6,] 0.11659611 0.20478050 -0.635405218 0.24848326 -0.051420865
## [7,] 0.09366237 -0.01903597 0.592115893 -0.37075027 0.068701598
## [8,] 0.17048116 0.23922267 -0.020718675 -0.23999012 -0.567331898
## [9,] 0.02513762 0.56139075 0.167745886 -0.01096960 0.340710903
## [10,] 0.44746911 -0.37460432 0.058367062 0.11232046 0.069555381
## [11,] 0.32765090 0.21762556 -0.037603106 -0.30301450 -0.314525906
evec[,1:4]
## [,1] [,2] [,3] [,4]
## [1,] 0.48931422 -0.110502738 -0.12330157 0.229617370
## [2,] -0.23858436 0.274930480 -0.44996253 -0.078959783
## [3,] 0.46363166 -0.151791356 0.23824707 0.079418256
## [4,] 0.14610715 0.272080238 0.10128338 0.372792562
## [5,] 0.21224658 0.148051555 -0.09261383 -0.666194756
## [6,] -0.03615752 0.513566812 0.42879287 0.043537818
## [7,] 0.02357485 0.569486959 0.32241450 0.034577115
## [8,] 0.39535301 0.233575490 -0.33887135 0.174499758
## [9,] -0.43851962 0.006710793 0.05769735 0.003787746
## [10,] 0.24292133 -0.037553916 0.27978615 -0.550872362
## [11,] -0.11323206 -0.386180959 0.47167322 0.122181088
#Matriz de Cargas Fatoriais A modelo completo
A <- sqrt(lambda)*t(evec)
A <- t(A) #Extracao dos Fatores
A[,1:4] #4 primeiros fatores
## [,1] [,2] [,3] [,4]
## [1,] 0.86140602 -0.153352549 -0.15353613 0.252916266
## [2,] -0.42001233 0.381540681 -0.56029703 -0.086971702
## [3,] 0.81619353 -0.210651715 0.29666720 0.087476695
## [4,] 0.25721219 0.377585196 0.12611890 0.410619209
## [5,] 0.37364637 0.205461726 -0.11532350 -0.733792441
## [6,] -0.06365298 0.712713376 0.53393641 0.047955529
## [7,] 0.04150200 0.790317762 0.40147319 0.038085598
## [8,] 0.69599339 0.324149404 -0.42196539 0.192205961
## [9,] -0.77198543 0.009313047 0.07184521 0.004172083
## [10,] 0.42764729 -0.052116254 0.34839201 -0.606768473
## [11,] -0.19933772 -0.535930923 0.58733137 0.134578602
AAT <- A%*%t(A)
AAT
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1.00000000 -0.256130895 0.67170343 0.114776724 0.093705186
## [2,] -0.25613089 1.000000000 -0.55249568 0.001917882 0.061297772
## [3,] 0.67170343 -0.552495685 1.00000000 0.143577162 0.203822914
## [4,] 0.11477672 0.001917882 0.14357716 1.000000000 0.055609535
## [5,] 0.09370519 0.061297772 0.20382291 0.055609535 1.000000000
## [6,] -0.15379419 -0.010503827 -0.06097813 0.187048995 0.005562147
## [7,] -0.11318144 0.076470005 0.03553302 0.203027882 0.047400468
## [8,] 0.66804729 0.022026232 0.36494718 0.355283371 0.200632327
## [9,] -0.68297819 0.234937294 -0.54190414 -0.085652422 -0.265026131
## [10,] 0.18300566 -0.260986685 0.31277004 0.005527121 0.371260481
## [11,] -0.06166827 -0.202288027 0.10990325 0.042075437 -0.221140545
## [,6] [,7] [,8] [,9] [,10] [,11]
## [1,] -0.153794193 -0.11318144 0.66804729 -0.68297819 0.183005664 -0.06166827
## [2,] -0.010503827 0.07647000 0.02202623 0.23493729 -0.260986685 -0.20228803
## [3,] -0.060978129 0.03553302 0.36494718 -0.54190414 0.312770044 0.10990325
## [4,] 0.187048995 0.20302788 0.35528337 -0.08565242 0.005527121 0.04207544
## [5,] 0.005562147 0.04740047 0.20063233 -0.26502613 0.371260481 -0.22114054
## [6,] 1.000000000 0.66766645 -0.02194583 0.07037750 0.051657572 -0.06940835
## [7,] 0.667666450 1.00000000 0.07126948 -0.06649456 0.042946836 -0.20565394
## [8,] -0.021945831 0.07126948 1.00000000 -0.34169933 0.148506412 -0.49617977
## [9,] 0.070377499 -0.06649456 -0.34169933 1.00000000 -0.196647602 0.20563251
## [10,] 0.051657572 0.04294684 0.14850641 -0.19664760 1.000000000 0.09359475
## [11,] -0.069408354 -0.20565394 -0.49617977 0.20563251 0.093594750 1.00000000
#Proporção da variabilidade explicada por cada componente
round(lambda/sum(lambda),4)
## [1] 0.2817 0.1751 0.1410 0.1103 0.0872 0.0600 0.0531 0.0385 0.0313 0.0165
## [11] 0.0054
#Matriz de Cargas Fatoriais m =4
Am4 <- A[,1:4]
AATm4 <- Am4%*%t(Am4)
AATm4
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 0.8530773 -0.356282107 0.71195314 0.24814895 0.12247144 -0.233977270
## [2,] -0.3562821 0.643480495 -0.59701330 -0.07034447 0.04989052 -0.004669574
## [3,] 0.7119531 -0.597013301 0.80620963 0.20373091 0.16328445 -0.039491036
## [4,] 0.2481489 -0.070344474 0.20373091 0.39324280 -0.14216804 0.339768628
## [5,] 0.1224714 0.049890516 0.16328445 -0.14216804 0.73357699 0.025886794
## [6,] -0.2339773 -0.004669574 -0.03949104 0.33976863 0.02588679 0.799399877
## [7,] -0.1374553 0.055850417 -0.01017259 0.37535914 0.10364091 0.776815880
## [8,] 0.6632227 0.051059853 0.39141293 0.32711765 0.23427895 -0.029361784
## [9,] -0.6763967 0.287179195 -0.61037224 -0.18427342 -0.29788297 0.094337555
## [10,] 0.1694177 -0.341932930 0.41029971 -0.11489421 0.55414529 0.092556300
## [11,] -0.1456638 -0.461539701 0.13621105 -0.12429753 -0.35108098 -0.049225308
## [,7] [,8] [,9] [,10] [,11]
## [1,] -0.137455339 0.66322270 -0.676396717 0.16941773 -0.14566381
## [2,] 0.055850417 0.05105985 0.287179195 -0.34193293 -0.46153970
## [3,] -0.010172594 0.39141293 -0.610372244 0.41029971 0.13621105
## [4,] 0.375359142 0.32711765 -0.184273418 -0.11489421 -0.12429753
## [5,] 0.103640907 0.23427895 -0.297882965 0.55414529 -0.35108098
## [6,] 0.776815880 -0.02936178 0.094337555 0.09255630 -0.04922531
## [7,] 0.788955815 0.12297864 0.004324146 0.09332073 -0.19090534
## [8,] 0.122978641 0.80447756 -0.563792229 0.01711234 -0.53442613
## [9,] 0.004324146 -0.56379223 0.601227370 -0.30812402 0.19165309
## [10,] 0.093320730 0.01711234 -0.308124024 0.67514328 0.06564798
## [11,] -0.190905338 -0.53442613 0.191653087 0.06564798 0.69002702
#Matriz PSI - Unicidade
psi <- diag(diag(s-AATm4))
psi
## [,1] [,2] [,3] [,4] [,5] [,6] [,7]
## [1,] 0.1469227 0.0000000 0.0000000 0.0000000 0.000000 0.0000000 0.0000000
## [2,] 0.0000000 0.3565195 0.0000000 0.0000000 0.000000 0.0000000 0.0000000
## [3,] 0.0000000 0.0000000 0.1937904 0.0000000 0.000000 0.0000000 0.0000000
## [4,] 0.0000000 0.0000000 0.0000000 0.6067572 0.000000 0.0000000 0.0000000
## [5,] 0.0000000 0.0000000 0.0000000 0.0000000 0.266423 0.0000000 0.0000000
## [6,] 0.0000000 0.0000000 0.0000000 0.0000000 0.000000 0.2006001 0.0000000
## [7,] 0.0000000 0.0000000 0.0000000 0.0000000 0.000000 0.0000000 0.2110442
## [8,] 0.0000000 0.0000000 0.0000000 0.0000000 0.000000 0.0000000 0.0000000
## [9,] 0.0000000 0.0000000 0.0000000 0.0000000 0.000000 0.0000000 0.0000000
## [10,] 0.0000000 0.0000000 0.0000000 0.0000000 0.000000 0.0000000 0.0000000
## [11,] 0.0000000 0.0000000 0.0000000 0.0000000 0.000000 0.0000000 0.0000000
## [,8] [,9] [,10] [,11]
## [1,] 0.0000000 0.0000000 0.0000000 0.000000
## [2,] 0.0000000 0.0000000 0.0000000 0.000000
## [3,] 0.0000000 0.0000000 0.0000000 0.000000
## [4,] 0.0000000 0.0000000 0.0000000 0.000000
## [5,] 0.0000000 0.0000000 0.0000000 0.000000
## [6,] 0.0000000 0.0000000 0.0000000 0.000000
## [7,] 0.0000000 0.0000000 0.0000000 0.000000
## [8,] 0.1955224 0.0000000 0.0000000 0.000000
## [9,] 0.0000000 0.3987726 0.0000000 0.000000
## [10,] 0.0000000 0.0000000 0.3248567 0.000000
## [11,] 0.0000000 0.0000000 0.0000000 0.309973
#Matriz Residual
s-(AATm4+psi)
## fixed.acidity volatile.acidity citric.acid residual.sugar
## fixed.acidity 0.000000000 0.100151213 -0.04024971 -0.13337222
## volatile.acidity 0.100151213 0.000000000 0.04451762 0.07226236
## citric.acid -0.040249708 0.044517616 0.00000000 -0.06015375
## residual.sugar -0.133372222 0.072262356 -0.06015375 0.00000000
## chlorides -0.028766250 0.011407257 0.04053846 0.19777757
## free.sulfur.dioxide 0.080183077 -0.005834253 -0.02148709 -0.15271963
## total.sulfur.dioxide 0.024273896 0.020619588 0.04570562 -0.17233126
## density 0.004824587 -0.029033620 -0.02646575 0.02816572
## pH -0.006581477 -0.052241900 0.06846810 0.09862100
## sulphates 0.013587936 0.080946245 -0.09752967 0.12042133
## alcohol 0.083995539 0.259251674 -0.02630781 0.16637297
## chlorides free.sulfur.dioxide total.sulfur.dioxide
## fixed.acidity -0.02876625 0.080183077 0.02427390
## volatile.acidity 0.01140726 -0.005834253 0.02061959
## citric.acid 0.04053846 -0.021487093 0.04570562
## residual.sugar 0.19777757 -0.152719633 -0.17233126
## chlorides 0.00000000 -0.020324647 -0.05624044
## free.sulfur.dioxide -0.02032465 0.000000000 -0.10914943
## total.sulfur.dioxide -0.05624044 -0.109149430 0.00000000
## density -0.03364662 0.007415953 -0.05170916
## pH 0.03285683 -0.023960057 -0.07081870
## sulphates -0.18288481 -0.040898728 -0.05037389
## alcohol 0.12994044 -0.020183045 -0.01474861
## density pH sulphates alcohol
## fixed.acidity 0.004824587 -0.006581477 0.01358794 0.08399554
## volatile.acidity -0.029033620 -0.052241900 0.08094624 0.25925167
## citric.acid -0.026465753 0.068468099 -0.09752967 -0.02630781
## residual.sugar 0.028165719 0.098620996 0.12042133 0.16637297
## chlorides -0.033646623 0.032856834 -0.18288481 0.12994044
## free.sulfur.dioxide 0.007415953 -0.023960057 -0.04089873 -0.02018305
## total.sulfur.dioxide -0.051709165 -0.070818705 -0.05037389 -0.01474861
## density 0.000000000 0.222092895 0.13139407 0.03824636
## pH 0.222092895 0.000000000 0.11147642 0.01397942
## sulphates 0.131394068 0.111476421 0.00000000 0.02794677
## alcohol 0.038246359 0.013979422 0.02794677 0.00000000
#2 Forma de fazer a Analise Fatorial
matcor <- cor(dados)
k <- 4
dados.pca <- prcomp(dados.pad, scale = TRUE) #PCA
carfat <- dados.pca$rotation[, 1:k] %*% diag(dados.pca$sdev[1:k])
colnames(carfat) <- paste("Fator", 1:k, sep = " ")
#Cargas Fatoriais com autovalor maior do que 1
carfat
## Fator 1 Fator 2 Fator 3 Fator 4
## fixed.acidity 0.86140602 -0.153352549 0.15353613 -0.252916266
## volatile.acidity -0.42001233 0.381540681 0.56029703 0.086971702
## citric.acid 0.81619353 -0.210651715 -0.29666720 -0.087476695
## residual.sugar 0.25721219 0.377585196 -0.12611890 -0.410619209
## chlorides 0.37364637 0.205461726 0.11532350 0.733792441
## free.sulfur.dioxide -0.06365298 0.712713376 -0.53393641 -0.047955529
## total.sulfur.dioxide 0.04150200 0.790317762 -0.40147319 -0.038085598
## density 0.69599339 0.324149404 0.42196539 -0.192205961
## pH -0.77198543 0.009313047 -0.07184521 -0.004172083
## sulphates 0.42764729 -0.052116254 -0.34839201 0.606768473
## alcohol -0.19933772 -0.535930923 -0.58733137 -0.134578602
#Comunalidade e Unicidade
comum <- rowSums(carfat^2)
vespec <- diag(matcor) - comum
estimat <- cbind(comum, vespec, diag(matcor))
rownames(estimat) <- colnames(dados)
colnames(estimat) <- c("Comunalidade", "Unicidade", "Variância")
estimat
## Comunalidade Unicidade Variância
## fixed.acidity 0.8530773 0.1469227 1
## volatile.acidity 0.6434805 0.3565195 1
## citric.acid 0.8062096 0.1937904 1
## residual.sugar 0.3932428 0.6067572 1
## chlorides 0.7335770 0.2664230 1
## free.sulfur.dioxide 0.7993999 0.2006001 1
## total.sulfur.dioxide 0.7889558 0.2110442 1
## density 0.8044776 0.1955224 1
## pH 0.6012274 0.3987726 1
## sulphates 0.6751433 0.3248567 1
## alcohol 0.6900270 0.3099730 1
#Matriz de Resíduos
resid <- matcor - (carfat %*% t(carfat) + diag(vespec))
resid
## fixed.acidity volatile.acidity citric.acid residual.sugar
## fixed.acidity 0.000000000 0.100151213 -0.04024971 -0.13337222
## volatile.acidity 0.100151213 0.000000000 0.04451762 0.07226236
## citric.acid -0.040249708 0.044517616 0.00000000 -0.06015375
## residual.sugar -0.133372222 0.072262356 -0.06015375 0.00000000
## chlorides -0.028766250 0.011407257 0.04053846 0.19777757
## free.sulfur.dioxide 0.080183077 -0.005834253 -0.02148709 -0.15271963
## total.sulfur.dioxide 0.024273896 0.020619588 0.04570562 -0.17233126
## density 0.004824587 -0.029033620 -0.02646575 0.02816572
## pH -0.006581477 -0.052241900 0.06846810 0.09862100
## sulphates 0.013587936 0.080946245 -0.09752967 0.12042133
## alcohol 0.083995539 0.259251674 -0.02630781 0.16637297
## chlorides free.sulfur.dioxide total.sulfur.dioxide
## fixed.acidity -0.02876625 8.018308e-02 0.02427390
## volatile.acidity 0.01140726 -5.834253e-03 0.02061959
## citric.acid 0.04053846 -2.148709e-02 0.04570562
## residual.sugar 0.19777757 -1.527196e-01 -0.17233126
## chlorides 0.00000000 -2.032465e-02 -0.05624044
## free.sulfur.dioxide -0.02032465 1.110223e-16 -0.10914943
## total.sulfur.dioxide -0.05624044 -1.091494e-01 0.00000000
## density -0.03364662 7.415953e-03 -0.05170916
## pH 0.03285683 -2.396006e-02 -0.07081870
## sulphates -0.18288481 -4.089873e-02 -0.05037389
## alcohol 0.12994044 -2.018305e-02 -0.01474861
## density pH sulphates alcohol
## fixed.acidity 0.004824587 -0.006581477 0.01358794 0.08399554
## volatile.acidity -0.029033620 -0.052241900 0.08094624 0.25925167
## citric.acid -0.026465753 0.068468099 -0.09752967 -0.02630781
## residual.sugar 0.028165719 0.098620996 0.12042133 0.16637297
## chlorides -0.033646623 0.032856834 -0.18288481 0.12994044
## free.sulfur.dioxide 0.007415953 -0.023960057 -0.04089873 -0.02018305
## total.sulfur.dioxide -0.051709165 -0.070818705 -0.05037389 -0.01474861
## density 0.000000000 0.222092895 0.13139407 0.03824636
## pH 0.222092895 0.000000000 0.11147642 0.01397942
## sulphates 0.131394068 0.111476421 0.00000000 0.02794677
## alcohol 0.038246359 0.013979422 0.02794677 0.00000000
# Estimativas das cargas fatoriais das variaveis
plot(carfat, pch = 20, col = "red", xlab = "Fator 1", ylab = "Fator 2")
text(carfat, rownames(carfat), adj = 1)
Em relação a Análise Fatorial por Máxima Verossimilhança, supondo o vetor de variáveis com distribuição Normal p-variada, tem-se
as variáveis padronizadas serão Z \(\sim\) N(0, \(\Sigma\));
o vetor de fatores será F \(\sim\) N(0,I);
o vetor de erros será \(\epsilon \sim N(0, \Psi)\)
Pelo modelo fatorial \(\mathbf{x}=\mathbf{\Lambda} \mathbf{f}+ \mathbf{\epsilon}\) e \(\mathbf{\Sigma} \approx AA' + \Psi\). Com uma amostra de n observações o objetivo é estimar \(\hat A\) e \(\hat \Psi\). O procedimento consiste em maximizar a função de verossimilhança
\[ L(0, \Sigma)=(2 \pi)^{(\frac{-np}{2})}|AA' + \Psi|^{\frac{-n}{2}}e^{\frac{-1}{2}\sum_{j=1}^n Z_j'(AA'+\Psi)^{-1}Z_j} \] É necessário definir o número de fatores antecipadamente. Uma mudança neste número acarreta mudança nas cargas fatoriais, diferentemente do método de componentes principais. Na Analise Fatorial por Máxima Verossimilhança há equivalência entre decompor \(\Sigma\) ou a matriz de covariâncias \(S\), o que não ocorre na AF via Componentes Principais.
# Definição do número de Fatores
eigv <- eigen(cor(dados))
eigv <- data.frame(nfact = 1:ncol(dados), eigval = eigv$values)
ggplot(data = eigv, mapping = aes(nfact, eigval)) +
geom_line() +
geom_point() +
geom_abline(slope = 0, intercept = 1, color = "red") +
labs(x = "Número de fatores",
y = "Autovalor",
title = "Scree plot") +
theme_bw()
#Terceira forma de fazer - factanal()
#Usar as variaveis padronizadas - dados.pad
#Não usa componentes principais, usa max verosimilhança
#Pelo Screeplot, tem-se 4 autovalores acima de 1
fatorial1 <- factanal(dados.pad, factors=4, rotation="none", na.action=na.omit)
fatorial1
##
## Call:
## factanal(x = dados.pad, factors = 4, na.action = na.omit, rotation = "none")
##
## Uniquenesses:
## fixed.acidity volatile.acidity citric.acid
## 0.101 0.789 0.401
## residual.sugar chlorides free.sulfur.dioxide
## 0.701 0.921 0.454
## total.sulfur.dioxide density pH
## 0.171 0.005 0.271
## sulphates alcohol
## 0.905 0.005
##
## Loadings:
## Factor1 Factor2 Factor3 Factor4
## fixed.acidity 0.438 -0.521 0.628 0.203
## volatile.acidity 0.123 0.328 -0.202 -0.218
## citric.acid 0.162 -0.430 0.499 0.373
## residual.sugar 0.185 0.325 0.379 0.125
## chlorides 0.245
## free.sulfur.dioxide 0.451 -0.104 0.575
## total.sulfur.dioxide 0.160 0.467 -0.148 0.750
## density 0.871 0.486
## pH -0.329 0.632 -0.168 -0.439
## sulphates 0.245 0.167
## alcohol -0.856 0.512
##
## Factor1 Factor2 Factor3 Factor4
## SS loadings 1.954 1.506 1.448 1.369
## Proportion Var 0.178 0.137 0.132 0.124
## Cumulative Var 0.178 0.315 0.446 0.571
##
## Test of the hypothesis that 4 factors are sufficient.
## The chi square statistic is 1458.43 on 17 degrees of freedom.
## The p-value is 4.32e-300
#fatorial1$loadings
load = fatorial1$loadings[,c(1,2)]
plot(load, type="n")
text(load, labels=names(dados.pad),cex = .7)#visualiza variaveis com fatores
fa.diagram(fatorial1$loadings, digits = 3, main = "Análise Fatorial")
A partir do diagrama com as cargas fatoriais é possível observar que as variáveis cloreto e sulfatos têm pouco peso na composição dos fatores. Assim, pode-se excluir tais variáveis do modelo.
dados2 <- subset(dados, select = -c(sulphates, chlorides))
dados2.pad <- as.data.frame(scale(dados2))
fatorial2<- factanal(dados2.pad, factors=4, rotation="none", na.action=na.omit)
fatorial2
##
## Call:
## factanal(x = dados2.pad, factors = 4, na.action = na.omit, rotation = "none")
##
## Uniquenesses:
## fixed.acidity volatile.acidity citric.acid
## 0.077 0.804 0.423
## residual.sugar free.sulfur.dioxide total.sulfur.dioxide
## 0.699 0.486 0.114
## density pH alcohol
## 0.005 0.295 0.005
##
## Loadings:
## Factor1 Factor2 Factor3 Factor4
## fixed.acidity 0.442 -0.320 0.634 0.472
## volatile.acidity 0.121 0.156 -0.205 -0.339
## citric.acid 0.164 -0.140 0.502 0.527
## residual.sugar 0.186 0.341 0.374 -0.102
## free.sulfur.dioxide 0.672 -0.109 0.223
## total.sulfur.dioxide 0.160 0.831 -0.155 0.381
## density 0.872 0.482
## pH -0.331 0.274 -0.174 -0.700
## alcohol -0.854 0.515
##
## Factor1 Factor2 Factor3 Factor4
## SS loadings 1.898 1.481 1.400 1.313
## Proportion Var 0.211 0.165 0.156 0.146
## Cumulative Var 0.211 0.375 0.531 0.677
##
## Test of the hypothesis that 4 factors are sufficient.
## The chi square statistic is 734.47 on 6 degrees of freedom.
## The p-value is 2.2e-155
Sabe-se que vetores característicos não são únicos e, por isso, as cargas fatoriais da Análise Fatorial por Componentes Principais podem ser modificadas sem prejudicar o significado da análise. A rotação consiste em “modificar” as cargas fatoriais, ou seja, calcular nova matriz A. O objetivo é obter uma matriz de cargas fatoriais de mais fácil interpretação, onde cada fator se relaciona mais distintamente com certo grupo de variáveis.
No entanto, nem sempre se tem uma estrutura nítida de relacionamento de variáveis e fatores. Normalmente, todas as variáveis apresentam coeficiente de correlação de certa magnitude com todos os fatores e, muitas vezes, é difícil identificar a relação de forma adequada. A rotação de fatores/eixos é um procedimento matematicamente correto e tem como finalidade facilitar a interpretação dos fatores, isto é, gerar uma nova solução para as cargas fatoriais que mostra uma relação mais nítida entre variáveis e fatores.
A rotação dos fatores consiste na rotação dos eixos coordenados e o cálculo de novos valores de abscissas e ordenadas relacionados com o novo sistema de eixos. Se o ângulo do novo sistema se mantiver em 90º, a rotação é denominada ortogonal e, se mudar o ângulo, a rotação é denominada oblíqua. No primeiro caso os fatores permanecem não correlacionados, mas, no segundo caso, haverá correlação, o que dificulta a interpretação.
Vale ressaltar que a rotação ortogonal modifica as cargas fatoriais, mas não modifica as comunalidades (\(h_i^2\)) e, como observa Mingoti (2005, p. 121), “em termos de qualidade de ajuste, esta nova solução não acrescenta nenhuma melhoria em relação ao ajuste obtido usando a matriz \(\hat A_{p_xm}\), pois a matriz residual original não é alterada pela transformação ortogonal”.
Existem diversos métodos de rotação, tanto ortogonal (Varimax, Quartimax, Orthomax, Equimax) quanto oblíqua (Oblimim, Quartimim, Biquartimim, Covax). Entretanto, o método de rotação mais utilizado é o Varimax, o qual permite que os coeficientes de correlação entre os indicadores e os fatores fiquem o mais próximo possível de zero ou de 1 em valor absoluto, facilitando a interpretação.
O método de Rotação Varimax “forma um novo sistema de eixos ortogonais com o mesmo número de fatores e permite que o grupo de variáveis apareça com maior nitidez, facilitando a interpretação e análise” (ZAMBRANO e LIMA, 2004).
Considere que partindo da já vista matriz de correlaçoes
\[ \mathbf{\Sigma} = AA'+\Psi \] se tenha uma matriz ortogonal T de tal forma que \(TT'=I\). Então, é possível escrever
\[ \mathbf{\Sigma} = ATT'A'+\Psi \]
\[ \mathbf{\Sigma} = AT(AT)'+\Psi \]
se denominar AT por A*, tem-se
\[ \mathbf{\Sigma} = A^{*} A^{* '}+ \Psi \] isto significa que dada uma solução para A, é possível encontrar uma outra solução para \(A^*\), através da escolha da matriz ortogonal T, que seja de mais fácil interpretação do que a solução original.
No critério Varimax, a busca pela matriz T tem como base a tentativa de encontrar fatores com grandes variabilidades nas cargas fatoriais, isto é, encontrar para um fator fixo, um grupo de variáveis X altamente correlacionadas com o fator e um outro grupo de variáveis que tenham correlação desprezível ou moderada com o fator.
Para cada fator fixo, a solução é obtida através da maximização da variação dos quadrados das cargas fatoriais originais das colunas da matriz A. Seja \(\hat a_{ij}^*\) o coeficiente da i-ésima variável no j-ésimo fator após a rotação, e seja V a quantidade definida por
\[ V= \frac{1}{p} \sum_{j=1}^m \Bigg[\sum_{i=1}^p \tilde a_{ij}^4-\frac{1}{p}(\sum_{i=1}^p \tilde a_{ij}^2)^2 \Bigg] \]
onde \(\tilde a_{ij}=(\hat a_{ij}^*/ \hat h_i)\), sendo \(\hat h_i\) a raiz quadrada da comunalidade da variável \(X_i\). A maximização de V corresponde a “puxar” os quadrados das cargas sobre cada fator o máximo possível. O que se espera é encontrar grupos definidos de coeficientes para cada coluna de fator.
A função da rotação de fatores tem a função de procurar cargas fatoriais que mostram um padrão de relacionamento claro e de fácil interpretação entre variáveis e fatores. Deve-se observar que as comunalidades não mudam, o que é uma característica da rotação ortogonal.
#Esimação da AF fazendo a rotação Varimax
fatorial3<- factanal(dados2.pad, factors=4, rotation="varimax", na.action=na.omit)
fatorial3
##
## Call:
## factanal(x = dados2.pad, factors = 4, na.action = na.omit, rotation = "varimax")
##
## Uniquenesses:
## fixed.acidity volatile.acidity citric.acid
## 0.077 0.804 0.423
## residual.sugar free.sulfur.dioxide total.sulfur.dioxide
## 0.699 0.486 0.114
## density pH alcohol
## 0.005 0.295 0.005
##
## Loadings:
## Factor1 Factor2 Factor3 Factor4
## fixed.acidity 0.843 -0.191 -0.110 0.404
## volatile.acidity -0.395 -0.180
## citric.acid 0.725 0.212
## residual.sugar 0.186 0.510
## free.sulfur.dioxide 0.709
## total.sulfur.dioxide 0.929 -0.113 0.102
## density 0.329 -0.500 0.794
## pH -0.801 0.244
## alcohol 0.991
##
## Factor1 Factor2 Factor3 Factor4
## SS loadings 2.150 1.454 1.362 1.126
## Proportion Var 0.239 0.162 0.151 0.125
## Cumulative Var 0.239 0.401 0.552 0.677
##
## Test of the hypothesis that 4 factors are sufficient.
## The chi square statistic is 734.47 on 6 degrees of freedom.
## The p-value is 2.2e-155
fa.diagram(fatorial3$loadings, digits = 3, main = "Análise Fatorial - Modelo Rotacionado Varimax")
#Comunalidades
rowSums(fatorial3$loadings^2)
## fixed.acidity volatile.acidity citric.acid
## 0.9225403 0.1960390 0.5772663
## residual.sugar free.sulfur.dioxide total.sulfur.dioxide
## 0.3010489 0.5139767 0.8859532
## density pH alcohol
## 0.9950187 0.7054388 0.9950052
# Matriz Residual
L <- fatorial3$loadings
rho_til <- L%*%t(L)+diag(fatorial3$uniquenesses)
U <- cor(dados2.pad) - rho_til
round(U, 4)
## fixed.acidity volatile.acidity citric.acid residual.sugar
## fixed.acidity 0.0000 0.0303 -0.0135 -0.0474
## volatile.acidity 0.0303 0.0000 -0.2687 -0.0315
## citric.acid -0.0135 -0.2687 0.0000 0.0267
## residual.sugar -0.0474 -0.0315 0.0267 0.0000
## free.sulfur.dioxide 0.0131 -0.0657 -0.0337 0.0163
## total.sulfur.dioxide 0.0000 0.0243 0.0029 -0.0136
## density 0.0002 0.0000 0.0005 0.0017
## pH -0.0079 -0.0407 0.0079 -0.1237
## alcohol 0.0002 0.0008 -0.0002 0.0009
## free.sulfur.dioxide total.sulfur.dioxide density pH
## fixed.acidity 0.0131 0.0000 0.0002 -0.0079
## volatile.acidity -0.0657 0.0243 0.0000 -0.0407
## citric.acid -0.0337 0.0029 0.0005 0.0079
## residual.sugar 0.0163 -0.0136 0.0017 -0.1237
## free.sulfur.dioxide 0.0000 0.0029 -0.0004 0.0321
## total.sulfur.dioxide 0.0029 0.0000 0.0000 -0.0015
## density -0.0004 0.0000 0.0000 0.0008
## pH 0.0321 -0.0015 0.0008 0.0000
## alcohol -0.0003 0.0001 0.0000 0.0004
## alcohol
## fixed.acidity 2e-04
## volatile.acidity 8e-04
## citric.acid -2e-04
## residual.sugar 9e-04
## free.sulfur.dioxide -3e-04
## total.sulfur.dioxide 1e-04
## density 0e+00
## pH 4e-04
## alcohol 0e+00
Para esse último modelo, o fator 1 está fortemente relacionado à acidez e Ph. O fator 2 ao dióxido de enxofre, o fator 3 é composto pela quantidade de alcool e o fator 4 pela densidade e açucar residual.
A partir das comunalidades é possível concluir que os 4 fatores explicam cerca de 92% da variabilidade da acidez fixa, pouco mais de 19% da variabilidade da acidez volátil, 57% da variabilidade da acidez cítrica, 30% da variabilidade do açucar residual, 51% da variabilidade do enxofre livre, 88% da variação no enxofre total, 99% da variação na densidade, 70% na variação do Ph e 99% da variabilidade do teor alcólico.
A análise da matriz residual indica a qualidade do modelo, que deve possuir uma matriz residual com valores muito próximos a zero. Assim, a partir desta matriz residual, o modelo em questão indica que a Análise Fatorial se ajusta bem aos dados amostrais, pois a grande maioria dos valores da matriz foram calculados proximos a zero.
Escores fatoriais são os valores de cada fator para cada observação da amostra. São importantes para mapeamento das observações e para serem utilizadas em outras técnicas, como cluster, regressão, etc. Como se tem um modelo estatístico estes escores devem ser estimados à semelhança de um modelo de regressão onde se obtém previsões para a variável dependente.
#Esimação da AF fazendo a rotação Varimax
fatorial3<- factanal(dados2.pad, factors=4, rotation="varimax", na.action=na.omit, scores = "regression")
escores <- as.data.frame(fatorial3$scores)
head(escores)
## Factor1 Factor2 Factor3 Factor4
## 1 -1.2360622 -0.5807083 -0.9455739 0.55844235
## 2 -0.2652997 0.6187115 -0.5241086 -0.12643174
## 3 -0.3868632 0.1224125 -0.5626608 -0.01721461
## 4 1.7121168 0.2748879 -0.6437796 -0.23777166
## 5 -1.2360622 -0.5807083 -0.9455739 0.55844235
## 6 -1.2027338 -0.4028737 -0.9294446 0.57104319
tail(escores)
## Factor1 Factor2 Factor3 Factor4
## 1594 -1.0047242 -0.08672978 -0.8360194 -0.27628205
## 1595 -1.0266198 0.25983888 0.1301690 -0.69497604
## 1596 -1.3018803 0.52578323 0.8478904 0.03093413
## 1597 -1.0580909 0.09027577 0.6045673 0.14173253
## 1598 -1.4658797 0.19227615 -0.1239344 -0.30072705
## 1599 -0.8063892 0.12198128 0.5930127 -0.13129171
ggplot(data = escores, mapping = aes(x = Factor1, y = Factor2)) +
geom_point() +
labs(x = "Fator 1",
y = "Fator 2",
title = "Dispersão dos escores fatoriais") +
theme_bw()
Matriz de Correlações: examinar a matriz de correlações simples, procurando visualizar algum padrão de relacionamento entre as variáveis; devem existir grupos de variáveis correlacionadas;
Matriz Anti-Imagem: Matriz de correlações Parciais com sinais invertidos. Matrizes anti-imagem podem ser usadas para avaliar se variáveis individuais devem ser incluídas na análise fatorial. Isso significa trazer a porção de variância de uma variável que pode ser explicada com as variáveis correlacionadas (imagem) em associação com a porção de variância inexplicável (anti-imagem). As variáveis são adequadas para incluir na análise fatorial se os valores da matriz anti-imagem forem baixos;
Teste de esfericidade de Bartlett: testa se a matriz de correlações é estatisticamente igual a uma matriz identidade. Se for, não é boa para Análise Fatorial. O que se busca, então, é rejeitar a hipótese nula de que a matriz de correlação verdadeira é uma matriz identidade;
Medida KMO (Kayser-Meyer-Olkin): é um índice que compara correlações simples e parciais:
\[ \mathbf{KMO}=\frac{\sum_{i=1}^{p}\sum_{j=1}^{p}r_{ij}^2}{\sum_{i=1}^{p}\sum_{j=1}^{p}r_{ij}^2+\sum_{i=1}^{p}\sum_{j=1}^{p}a_{ij}^2} \] em que \(r_{ij}\) é o coeficiente de correlação simples e \(a_{ij}\) é a correlação parcial.
Quanto mais \(\sum_{i=1}^{p}\sum_{j=1}^{p}a_{ij}^2\) for próximo de 0, mais o valor de \(\mathbf{KMO}\) se aproximará de 1 e mais adequados os dados serão para a Análise fatorial. Valores abaixo de 0,6 são considerados ruins para a Análise Fatorial.
#Correlaçoes Parciais - Matriz anti-imagem coeficientes de corr
partial.cor <- function (X, ...)
{
R <- cor(X, ...)
RI <- solve(R)
D <- 1/sqrt(diag(RI))
Rp <- -RI * (D %o% D)
diag(Rp) <- 0
rownames(Rp) <- colnames(Rp) <- colnames(X)
Rp
}
matcorp <- partial.cor(dados)
print(matcorp, digits=2)
## fixed.acidity volatile.acidity citric.acid residual.sugar
## fixed.acidity 0.00 0.050 0.3333 -0.431
## volatile.acidity 0.05 0.000 -0.5355 -0.024
## citric.acid 0.33 -0.535 0.0000 0.053
## residual.sugar -0.43 -0.024 0.0534 0.000
## chlorides -0.23 0.264 0.2637 -0.011
## free.sulfur.dioxide 0.11 -0.165 -0.1625 0.126
## total.sulfur.dioxide -0.23 0.214 0.2650 0.036
## density 0.79 0.128 0.0086 0.595
## pH -0.72 0.027 -0.0342 -0.329
## sulphates -0.15 -0.209 0.0266 -0.201
## alcohol 0.54 0.079 0.1495 0.502
## chlorides free.sulfur.dioxide total.sulfur.dioxide density
## fixed.acidity -0.233 0.110 -0.232 0.7854
## volatile.acidity 0.264 -0.165 0.214 0.1284
## citric.acid 0.264 -0.162 0.265 0.0086
## residual.sugar -0.011 0.126 0.036 0.5952
## chlorides 0.000 0.059 -0.140 0.0938
## free.sulfur.dioxide 0.059 0.000 0.663 -0.0854
## total.sulfur.dioxide -0.140 0.663 0.000 0.0788
## density 0.094 -0.085 0.079 0.0000
## pH -0.231 0.138 -0.194 0.5722
## sulphates 0.351 0.054 0.033 0.2480
## alcohol -0.092 -0.026 -0.083 -0.7558
## pH sulphates alcohol
## fixed.acidity -0.719 -0.152 0.543
## volatile.acidity 0.027 -0.209 0.079
## citric.acid -0.034 0.027 0.149
## residual.sugar -0.329 -0.201 0.502
## chlorides -0.231 0.351 -0.092
## free.sulfur.dioxide 0.138 0.054 -0.026
## total.sulfur.dioxide -0.194 0.033 -0.083
## density 0.572 0.248 -0.756
## pH 0.000 -0.129 0.520
## sulphates -0.129 0.000 0.289
## alcohol 0.520 0.289 0.000
#Estatística KMO
KMO(cor(dados))
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = cor(dados))
## Overall MSA = 0.43
## MSA for each item =
## fixed.acidity volatile.acidity citric.acid
## 0.45 0.52 0.70
## residual.sugar chlorides free.sulfur.dioxide
## 0.21 0.46 0.48
## total.sulfur.dioxide density pH
## 0.45 0.37 0.45
## sulphates alcohol
## 0.51 0.23
# Bartlett teste de esfericidade
cortest.bartlett(cor(dados), n = nrow(dados))
## $chisq
## [1] 8017.566
##
## $p.value
## [1] 0
##
## $df
## [1] 55
bart_spher(dados)
## Bartlett's Test of Sphericity
##
## Call: bart_spher(x = dados)
##
## X2 = 8017.566
## df = 55
## p-value < 2.22e-16
Um outro exemplo é do trabalho que visou construiu um Índice de
Desenvolvimento Humano da mesorregião do Campo das Vertentes-MG
(IDF-CV), para o ano de 2000, com base em 10 indicadores socioeconômicos
de saúde, infraestrutura, educação e vulnerabilidade renda (Esperança de
vida ao nascer; Mortalidade até um ano de idade; em cada mil crianças
nascidas vivas; Percentual de pessoas que vivem em domicílios com
banheiro e água encanada; Percentual de pessoas que vivem em domicílios
com energia elétrica e geladeira; Percentual de pessoas que vivem em
domicílios urbanos com serviço de coleta de lixo; Percentual de pessoas
que vivem em domicílios com carro, computador e TV; Percentual da renda
proveniente de transferências governamentais; Razão entre a renda média
dos 20% mais ricos e a dos 40% mais pobres; Percentual de pessoas que
vivem em famílias com razão de dependência maior que 75%; Taxa de
alfabetização). Para isto, foi utilizada a técnica da Análise Fatorial.
#Direcionado o R para o Diretorio a ser trabalhado
setwd('/Users/jricardofl/Dropbox/tempecon/multivariada')
library(tidyverse)
library(skimr)
library(psych)
library(REdaS)
#Lendo os dados no R
dadosc <- read.csv2('idh_mg.csv', header=TRUE, sep=";", dec=".")
dados <- dadosc[,-1]
attach(dados)
glimpse(dados)
## Rows: 36
## Columns: 10
## $ esp <dbl> 70.50, 70.93, 72.47, 69.23, 70.06, 70.18, 72.47, 70.68, 6…
## $ mort <dbl> 27.17, 25.92, 21.67, 31.06, 28.49, 28.12, 21.67, 26.66, 4…
## $ banho <dbl> 93.83, 86.76, 96.40, 95.08, 86.22, 74.52, 92.80, 89.01, 8…
## $ energia <dbl> 75.88, 72.66, 88.31, 77.68, 55.28, 54.61, 73.26, 78.20, 6…
## $ lixo <dbl> 84.64, 94.26, 95.39, 92.41, 87.94, 79.43, 76.71, 96.06, 8…
## $ rend_transf <dbl> 18.93, 19.73, 20.92, 24.67, 25.38, 23.27, 24.85, 18.07, 2…
## $ X20_40pobres <dbl> 9.53, 9.74, 13.73, 12.19, 6.80, 9.16, 11.94, 14.60, 7.10,…
## $ alfabet <dbl> 84.07, 84.50, 91.47, 91.44, 85.59, 85.28, 90.08, 87.84, 8…
## $ ant_3 <dbl> 33.06, 32.33, 58.16, 34.94, 20.72, 24.56, 33.74, 31.10, 2…
## $ dep_75 <dbl> 34.68, 36.62, 33.82, 35.42, 35.33, 40.13, 36.45, 42.85, 3…
head(dados)
## esp mort banho energia lixo rend_transf X20_40pobres alfabet ant_3 dep_75
## 1 70.50 27.17 93.83 75.88 84.64 18.93 9.53 84.07 33.06 34.68
## 2 70.93 25.92 86.76 72.66 94.26 19.73 9.74 84.50 32.33 36.62
## 3 72.47 21.67 96.40 88.31 95.39 20.92 13.73 91.47 58.16 33.82
## 4 69.23 31.06 95.08 77.68 92.41 24.67 12.19 91.44 34.94 35.42
## 5 70.06 28.49 86.22 55.28 87.94 25.38 6.80 85.59 20.72 35.33
## 6 70.18 28.12 74.52 54.61 79.43 23.27 9.16 85.28 24.56 40.13
tail(dados)
## esp mort banho energia lixo rend_transf X20_40pobres alfabet ant_3
## 31 71.31 24.84 96.27 84.67 97.14 20.39 6.45 91.55 30.68
## 32 66.38 40.75 87.08 57.72 83.07 21.20 14.64 80.10 19.99
## 33 74.58 16.43 95.70 90.90 93.08 23.83 10.98 94.01 44.89
## 34 68.90 32.11 93.73 71.91 96.11 19.83 9.19 88.84 26.19
## 35 70.93 25.92 85.90 59.44 86.72 20.65 18.12 81.11 24.68
## 36 71.31 24.84 83.91 87.46 92.94 17.16 11.71 89.51 44.14
## dep_75
## 31 38.06
## 32 37.95
## 33 33.51
## 34 37.25
## 35 33.41
## 36 36.26
# Estatística descritiva das variáveis
summary(dados)
## esp mort banho energia
## Min. :65.34 Min. :16.43 Min. :74.52 Min. :47.10
## 1st Qu.:69.14 1st Qu.:25.36 1st Qu.:85.75 1st Qu.:63.50
## Median :70.68 Median :26.66 Median :90.58 Median :73.72
## Mean :70.22 Mean :28.32 Mean :89.46 Mean :73.07
## 3rd Qu.:71.13 3rd Qu.:31.33 3rd Qu.:93.75 3rd Qu.:82.09
## Max. :74.58 Max. :44.67 Max. :99.39 Max. :94.07
## lixo rend_transf X20_40pobres alfabet
## Min. :73.17 Min. :12.46 Min. : 6.270 Min. :76.54
## 1st Qu.:83.63 1st Qu.:18.82 1st Qu.: 8.615 1st Qu.:85.27
## Median :88.75 Median :20.61 Median :11.350 Median :88.41
## Mean :88.45 Mean :20.59 Mean :11.111 Mean :87.49
## 3rd Qu.:93.67 3rd Qu.:22.55 3rd Qu.:12.480 3rd Qu.:90.69
## Max. :97.14 Max. :26.39 Max. :18.670 Max. :94.01
## ant_3 dep_75
## Min. :19.87 Min. :32.66
## 1st Qu.:25.57 1st Qu.:35.55
## Median :31.25 Median :36.82
## Mean :32.13 Mean :36.76
## 3rd Qu.:35.07 3rd Qu.:37.74
## Max. :58.16 Max. :42.85
skim(dados)
| Name | dados |
| Number of rows | 36 |
| Number of columns | 10 |
| _______________________ | |
| Column type frequency: | |
| numeric | 10 |
| ________________________ | |
| Group variables | None |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| esp | 0 | 1 | 70.22 | 1.96 | 65.34 | 69.14 | 70.68 | 71.13 | 74.58 | ▂▂▇▆▁ |
| mort | 0 | 1 | 28.32 | 6.07 | 16.43 | 25.36 | 26.66 | 31.33 | 44.67 | ▃▇▃▂▂ |
| banho | 0 | 1 | 89.46 | 5.56 | 74.52 | 85.76 | 90.58 | 93.75 | 99.39 | ▁▅▆▇▅ |
| energia | 0 | 1 | 73.07 | 12.52 | 47.10 | 63.50 | 73.72 | 82.09 | 94.07 | ▃▃▆▇▅ |
| lixo | 0 | 1 | 88.45 | 6.55 | 73.17 | 83.63 | 88.75 | 93.67 | 97.14 | ▁▃▃▃▇ |
| rend_transf | 0 | 1 | 20.59 | 3.01 | 12.46 | 18.82 | 20.60 | 22.55 | 26.39 | ▁▂▇▅▃ |
| X20_40pobres | 0 | 1 | 11.11 | 3.04 | 6.27 | 8.62 | 11.35 | 12.48 | 18.67 | ▆▃▇▃▁ |
| alfabet | 0 | 1 | 87.49 | 4.30 | 76.54 | 85.27 | 88.41 | 90.69 | 94.01 | ▂▂▅▇▆ |
| ant_3 | 0 | 1 | 32.13 | 9.33 | 19.87 | 25.56 | 31.25 | 35.07 | 58.16 | ▆▇▂▂▁ |
| dep_75 | 0 | 1 | 36.76 | 2.16 | 32.66 | 35.55 | 36.82 | 37.74 | 42.85 | ▃▆▇▂▁ |
#Estatística KMO
KMO(cor(dados))
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = cor(dados))
## Overall MSA = 0.7
## MSA for each item =
## esp mort banho energia lixo rend_transf
## 0.67 0.67 0.73 0.73 0.87 0.51
## X20_40pobres alfabet ant_3 dep_75
## 0.24 0.85 0.74 0.58
# Bartlett teste de esfericidade
cortest.bartlett(cor(dados), n = nrow(dados))
## $chisq
## [1] 332.1296
##
## $p.value
## [1] 1.984378e-45
##
## $df
## [1] 45
bart_spher(dados)
## Bartlett's Test of Sphericity
##
## Call: bart_spher(x = dados)
##
## X2 = 332.13
## df = 45
## p-value < 2.22e-16
#Correlaçoes Parciais - Matriz anti-imagem coeficientes de corr
partial.cor <- function (X, ...)
{
R <- cor(X, ...)
RI <- solve(R)
D <- 1/sqrt(diag(RI))
Rp <- -RI * (D %o% D)
diag(Rp) <- 0
rownames(Rp) <- colnames(Rp) <- colnames(X)
Rp
}
matcorp <- partial.cor(dados)
print(matcorp, digits=2)
## esp mort banho energia lixo rend_transf X20_40pobres
## esp 0.000 -0.996 0.053 0.075 -0.114 0.158 0.074
## mort -0.996 0.000 0.065 0.072 -0.118 0.165 0.059
## banho 0.053 0.065 0.000 0.506 0.293 0.351 0.254
## energia 0.075 0.072 0.506 0.000 0.141 -0.380 -0.404
## lixo -0.114 -0.118 0.293 0.141 0.000 -0.351 0.017
## rend_transf 0.158 0.165 0.351 -0.380 -0.351 0.000 -0.236
## X20_40pobres 0.074 0.059 0.254 -0.404 0.017 -0.236 0.000
## alfabet -0.105 -0.116 0.117 0.124 0.068 0.116 -0.423
## ant_3 0.121 0.101 -0.234 0.670 0.027 0.196 0.484
## dep_75 -0.087 -0.072 -0.197 0.156 0.097 -0.073 0.336
## alfabet ant_3 dep_75
## esp -0.105 0.121 -0.087
## mort -0.116 0.101 -0.072
## banho 0.117 -0.234 -0.197
## energia 0.124 0.670 0.156
## lixo 0.068 0.027 0.097
## rend_transf 0.116 0.196 -0.073
## X20_40pobres -0.423 0.484 0.336
## alfabet 0.000 0.299 0.199
## ant_3 0.299 0.000 -0.317
## dep_75 0.199 -0.317 0.000
# Definição do número de Fatores
eigv <- eigen(cor(dados))
eigv <- data.frame(nfact = 1:ncol(dados), eigval = eigv$values)
ggplot(data = eigv, mapping = aes(nfact, eigval)) +
geom_line() +
geom_point() +
geom_abline(slope = 0, intercept = 1, color = "red") +
labs(x = "Número de fatores",
y = "Autovalor",
title = "Scree plot") +
theme_bw()
#Padronizaçao dos dados
dados.pad <-as.data.frame(scale(dados))
s <- cov(dados.pad) #matriz de cov com var pad = mat correlaçoes origem
#Autovalores e Autovetores da Matriz de Covariancias
lambda <-eigen(s)$values
lambda[1:3]
## [1] 4.628794 1.587772 1.339147
evec <-eigen(s)$vectors
evec[,1:3]
## [,1] [,2] [,3]
## [1,] 0.34885131 -0.28329574 0.42235518
## [2,] -0.34625878 0.29228336 -0.41385695
## [3,] 0.33160581 0.23849914 -0.19934006
## [4,] 0.42552524 0.10846951 -0.18012801
## [5,] 0.33869887 -0.08357043 -0.40080608
## [6,] -0.15904596 0.45277917 0.40583177
## [7,] -0.03376863 -0.60774320 0.06261031
## [8,] 0.36046960 0.27352317 -0.11576985
## [9,] 0.41521607 0.01176567 0.05227321
## [10,] -0.15452481 -0.33070885 -0.48244774